অ্যান্ড্রয়েড পপআপ উইন্ডো যখন সক্রিয় থাকে তখন অস্পষ্ট বা ম্লান পটভূমি


85

আমি যখন আমার পপআপ উইন্ডোটি ব্যবহার করে দেখি তখন পটভূমিটি অস্পষ্ট বা popup.showAtLocationম্লান করতে সক্ষম হতে চাই এবং যখন popup.dismissডাকা হয় তখন পটভূমিটি ব্ল্যাক / কমিয়ে দেয় ।

আমি বিন্যাসের প্যারামগুলি FLAG_BLUR_BEHINDএবং FLAG_DIM_BEHINDআমার ক্রিয়াকলাপ প্রয়োগ করার চেষ্টা করেছি, তবে এটি আমার অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে পটভূমিকে কেবল অস্পষ্ট এবং ম্লান বলে মনে হচ্ছে।

আমি কীভাবে কেবল পপআপগুলির সাথে ঝাপসা / আবছা করতে পারি?


4
সতর্কতার শব্দ: FLAG_BLUR_BEHIND কিছু ফোনে বগিযুক্ত এবং ফোনটিকে খুব প্রতিক্রিয়াশীল করে তোলে (সম্ভবত সফ্টওয়্যারটিতে অস্পষ্টতা কাজ করা হয়েছে)। উদাহরণস্বরূপ Droid এ। তা ছাড়া, ম্যাকার্সে যা বলেছে - FLAG_BLUR_BEHIND অগ্রভাগের উইন্ডোতে প্রয়োগ করা দরকার।
ইবোমাইক


4
আমি এই প্রশ্নের একই উত্তর খুঁজছি। পপআপ উইন্ডোর পিছনে যে দৃশ্যটি রয়েছে তা আমি প্রোগ্রামিমেটিকভাবে ম্লান করতে পারি এমন কোনও উপায় আছে?
নিক

4
@ নিক কীভাবে আপনি এই সমস্যার সমাধান করেছেন ..
অমিত

উত্তর:


108

প্রশ্নটি Popupwindowক্লাস সম্পর্কে ছিল , তবুও প্রত্যেকে উত্তর দিয়েছে যা Dialogক্লাস ব্যবহার করে । এখানেই প্রায় কাছাকাছি বেহুদা আপনি ব্যবহার করার দরকার হয় Popupwindowকারণ, বর্গ Popupwindowএকটি নেই getWindow()পদ্ধতি।

আমি একটি সমাধান পেয়েছি যা বাস্তবে কাজ করে Popupwindow। এর জন্য কেবলমাত্র ব্যাকগ্রাউন্ড ক্রিয়াকলাপের জন্য আপনি যে এক্সএমএল ফাইলটি ব্যবহার করেন তার মূলটি হ'ল FrameLayout। আপনি Framelayoutউপাদানটি একটি android:foregroundট্যাগ দিতে পারেন । এই ট্যাগটি যা করে তা একটি অঙ্কনযোগ্য সংস্থান নির্দিষ্ট করে যা পুরো ক্রিয়াকলাপের শীর্ষে স্তরযুক্ত করা হবে (এটি যদি ফ্রেমলেআউটটি এক্সএমএল ফাইলের মূল উপাদান হয়)। তারপরে আপনি setAlpha()অগ্রভাগের অঙ্কনযোগ্য ( ) এর অস্বচ্ছতা নিয়ন্ত্রণ করতে পারেন ।

আপনি পছন্দ মতো যে কোনও অঙ্কনীয় উত্স ব্যবহার করতে পারেন তবে আপনি যদি কেবল একটি ম্লান প্রভাব চান তবে <shape>মূল হিসাবে ট্যাগের সাথে আঁকযোগ্য ফোল্ডারে একটি এক্সএমএল ফাইল তৈরি করুন ।

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="#000000" />
</shape>

( উপাদানটির আরও তথ্যের জন্য http://developer.android.com/guide/topics/resources/drawable-resource.html# শ্যা্যাপ দেখুন shape)। নোট করুন যে আমি রঙের ট্যাগে এমন একটি আলফা মান নির্দিষ্ট করেছিলাম যা অঙ্কনীয় আইটেমটিকে স্বচ্ছ করতে পারে (উদাঃ #ff000000)। এর কারণ হ'ল যে কোনও হার্ডকোডযুক্ত আলফা মানটি setAlpha()আমাদের কোডের মাধ্যমে আমরা সেট করা কোনও নতুন আলফা মানকে ওভাররাইড করে বলে মনে হয় , তাই আমরা এটি চাই না। তবে এর অর্থ এই যে অঙ্কনযোগ্য আইটেমটি প্রাথমিকভাবে অস্বচ্ছ (কঠিন, স্বচ্ছ নয়) হবে। সুতরাং আমাদের এটিকে ক্রিয়াকলাপের onCreate()পদ্ধতিতে স্বচ্ছ করতে হবে ।

ফ্রেমলেআউট এক্সএমএল উপাদান কোডটি এখানে:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainmenu"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:foreground="@drawable/shape_window_dim" >
...
... your activity's content
...
</FrameLayout>

ক্রিয়াকলাপের অনক্রিট () পদ্ধতিটি এখানে:

public void onCreate( Bundle savedInstanceState)
{
  super.onCreate( savedInstanceState);

  setContentView( R.layout.activity_mainmenu);

  //
  // Your own Activity initialization code
  //

  layout_MainMenu = (FrameLayout) findViewById( R.id.mainmenu);
  layout_MainMenu.getForeground().setAlpha( 0);
}

অবশেষে, ক্রিয়াকলাপটি কমিয়ে দেওয়ার কোড:

layout_MainMenu.getForeground().setAlpha( 220); // dim

layout_MainMenu.getForeground().setAlpha( 0); // restore

আলফা মানগুলি থেকে যায় 0 (অস্বচ্ছ) থেকে 255(অদৃশ্য) যায়। আপনি পপআপ উইন্ডোটি বরখাস্ত করার সময় আপনার ক্রিয়াকলাপটি আন-ডিম্প করা উচিত।

আমি পপআপ উইন্ডোটি দেখানোর বা প্রত্যাখ্যান করার কোডটি অন্তর্ভুক্ত করি নি, তবে এটি কীভাবে করা যায় তার একটি লিঙ্ক এখানে দেওয়া হয়েছে: http://www.mobilemancer.com/2011/01/08/popup-window-in-android/


এটি পুরানো ডিভাইসে কাজ করে কিনা তা নিশ্চিত করতে আপনাকেও আলফা-চ্যানেলে প্রতিটি পরিবর্তন করার পরে অগ্রভাগ অকার্যকর করতে হবে। আমি এটি উত্তরে যুক্ত করেছি। সুন্দর উত্তরের জন্য +1
ব্যবহারকারী 2224350

4
আমি সঠিক কারণ হিসাবে চিহ্নিত করা হয়নি যে একটি কারণ সম্পর্কে চিন্তা করতে পারি না .. কমপক্ষে বলার জন্য দুর্দান্ত উত্তর।
জয়শিল ডেভ


এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে ... নীচের ডাবল পপআপ উত্তরের একটি রেসের শর্ত ছিল তাই
ডেম্পড পপআপটি

4
প্রায় নিখুঁত. কেবলমাত্র অপূর্ণতা হ'ল অন্য লেআউটের জন্য কোনও "getForeground" পদ্ধতি না থাকায় আপনাকে ফ্রেমলিআউট ব্যবহার করতে হবে।
লিয়াংওয়াং

81

যেহেতু PopupWindowমাত্র যোগ একটি Viewথেকে WindowManagerআপনি ব্যবহার করতে পারেন updateViewLayout (View view, ViewGroup.LayoutParams params)আপডেট করার জন্য LayoutParamsআপনার এর PopupWindow'রcontentView প্রদর্শনী কলিং পর) .. (।

উইন্ডো পতাকা সেট উইন্ডো FLAG_DIM_BEHINDপিছনের সবকিছু আবছা হবে। dimAmountম্লানির পরিমাণ নিয়ন্ত্রণ করতে ব্যবহার করুন (কোনও ধীরতার জন্য সম্পূর্ণ অস্বচ্ছ থেকে ০.০)

মনে রাখবেন যে আপনি যদি কোনও ব্যাকগ্রাউন্ড সেট করেন তবে PopupWindowএটি আপনার contentViewপাত্রে রাখবে , যার অর্থ আপনার পিতামাতাকে আপডেট করতে হবে।

পটভূমি সহ:

PopupWindow popup = new PopupWindow(contentView, width, height);
popup.setBackgroundDrawable(background);
popup.showAsDropDown(anchor);

View container = (View) popup.getContentView().getParent();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams p = (WindowManager.LayoutParams) container.getLayoutParams();
// add flag
p.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
p.dimAmount = 0.3f;
wm.updateViewLayout(container, p);

ব্যাকগ্রাউন্ড ছাড়াই:

PopupWindow popup = new PopupWindow(contentView, width, height);
popup.setBackgroundDrawable(null);
popup.showAsDropDown(anchor);

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams p = (WindowManager.LayoutParams) contentView.getLayoutParams();
// add flag
p.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
p.dimAmount = 0.3f;
wm.updateViewLayout(contentView, p);

মার্শমেলো আপডেট:

এম পপআপ উইন্ডোতে কন্টেন্টভিউটিকে এমডেকারভিউ নামে একটি ফ্রেমলাউটের অভ্যন্তরে আবৃত করে। আপনি যদি পপআপ উইন্ডো উত্সটি খনন করেন তবে আপনি এরকম কিছু পাবেনcreateDecorView(View contentView) m

ব্যাকগ্রাউন্ডের সাথে এমন কিছুর পরিবর্তনের প্রয়োজন হবে:

View container = (View) popup.getContentView().getParent().getParent();

18++ API এর জন্য আরও ভাল বিকল্প

ব্যবহার করে একটি কম হ্যাকি সমাধান ViewGroupOverlay:

1) পছন্দসই মূল লেআউটটি ধরে রাখুন

ViewGroup root = (ViewGroup) getWindow().getDecorView().getRootView();

2) কল করুন applyDim(root, 0.5f);বাclearDim()

public static void applyDim(@NonNull ViewGroup parent, float dimAmount){
    Drawable dim = new ColorDrawable(Color.BLACK);
    dim.setBounds(0, 0, parent.getWidth(), parent.getHeight());
    dim.setAlpha((int) (255 * dimAmount));

    ViewGroupOverlay overlay = parent.getOverlay();
    overlay.add(dim);
}

public static void clearDim(@NonNull ViewGroup parent) {
    ViewGroupOverlay overlay = parent.getOverlay();
    overlay.clear();
}

4
এটি আর অ্যান্ড্রয়েড 6.0 মার্শমেলো চালিত ডিভাইসগুলিতে কাজ করবে বলে মনে হয় না। লেআউটপ্যারামগুলিতে কাস্ট করা হয় না WindowManager.LayoutParams। এখানে কি কাজ আছে?
রবার্ট

এটা ইশারা জন্য ধন্যবাদ. আমি এখনও এম তে এটি পরীক্ষা করিনি। ASAP আপডেট করবে।
মার্কাস রুবে

@ stackoverflow.com/users/308153/robert আমারও একই সমস্যা ছিল। আমি উপরের কোডটি ব্যাকগ্রাউন্ড সহ ব্যবহার করেছি।
রিজওয়ান সোহাইব

যদি পি if (p != null) { //same } else { popupView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { v.removeOnLayoutChangeListener(this); WindowManager.LayoutParams p = (WindowManager.LayoutParams) v.getLayoutParams(); p.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND; p.dimAmount = 0.3f; wm.updateViewLayout(v, p); } }); }
নਾਲ

4
এফওয়াইআই যখন আমি এটি নিম্ন এপিআই স্তরে ব্যবহার করি (উদাঃ 15 এবং 20) এটি ক্রাশ হয়ে যায় কারণ পপআপ.জেট কনটেন্টভিউ () .পেট প্যারেন্ট () দেখুন না তাই কাস্টিং এটি ক্রাশের কারণ হবে। এই ক্ষেত্রে আমি @ বিট্যানকুর্টের পদ্ধতিটিকে ফ্যালব্যাক হিসাবে ব্যবহার করেছি।
ম্যাথু হর্স্ট

30

আপনার এক্সএমএল ফাইলে প্রস্থ এবং উচ্চতার সাথে 'ম্যাচ প্যারেন্ট' হিসাবে এর মতো কিছু যুক্ত করুন।

<RelativeLayout
        android:id="@+id/bac_dim_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#C0000000"
        android:visibility="gone" >
</RelativeLayout>

আপনার ক্রিয়াকলাপে ক্রমাগত

//setting background dim when showing popup
back_dim_layout = (RelativeLayout) findViewById(R.id.share_bac_dim_layout);

আপনার পপআপ উইন্ডোটি দেখানোর পরে অবশেষে দৃশ্যমান করুন এবং যখন আপনি পপআপ উইন্ডো থেকে প্রস্থান করবেন তখন তা দৃশ্যমান হয়ে যাবে।

back_dim_layout.setVisibility(View.VISIBLE);
back_dim_layout.setVisibility(View.GONE);

4
পোস্টে "ধন্যবাদ, রূপেশ" এর মতো স্বাক্ষর রাখবেন না।
সাইমন হেলিংগার

4
তবে এটি অ্যাকশন / সরঞ্জাম দন্ডটি ম্লান করবে না।
সিলভিয়া এইচ

প্লাজ আমাকে কীভাবে সরঞ্জামদণ্ডটি
ম্লান

4
back_dim_layout.setVisibility (View.GONE) যোগ করুন; PopupWindow.OnDismissListener মধ্যে
Pulkit

অবশ্যই আমাকে সাহায্য করেছে
পিক্সসু ওয়াকু

12

আর একটি কৌশলটি এর পরিবর্তে 2 টি পপআপ উইন্ডো ব্যবহার করা। 1 ম পপআপ উইন্ডোটি কেবল স্বচ্ছ পটভূমির সাথে একটি ডামি ভিউ হবে যা ম্লান প্রভাব সরবরাহ করে। ২ য় পপআপ উইন্ডোটি হ'ল আপনার পপআপ উইন্ডো intended

পপ আপ উইন্ডোজ তৈরি করার সময় ক্রম: ডামি পপ আপ উইন্ডোটি 1 ম এবং তারপরে পপআপ উইন্ডোটি প্রদর্শন করুন।

ধ্বংস করার সময় ক্রম: উদ্দেশ্যযুক্ত পপ আপ উইন্ডোটি বাতিল করুন এবং তারপরে ডামি পপ আপ উইন্ডোটি বাতিল করুন।

এই দু'টিকে লিঙ্ক করার সর্বোত্তম উপায় হ'ল একটি অনডিজমলিস্টনার যুক্ত করা এবং onDismiss()তাদের থেকে ডমি পপআপ উইন্ডোটি হ্রাস করার উদ্দেশ্যে পদ্ধতিটি ওভাররাইড করা ।

ডামি পপআপ উইন্ডোর জন্য কোড:

fadepopup.xML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:id="@+id/fadePopup"
    android:background="#AA000000">
</LinearLayout>

পটভূমিটি ম্লান করতে বিবর্ণ পপআপ দেখান

private PopupWindow dimBackground() {

    LayoutInflater inflater = (LayoutInflater) EPGGRIDActivity.this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View layout = inflater.inflate(R.layout.fadepopup,
            (ViewGroup) findViewById(R.id.fadePopup));
    PopupWindow fadePopup = new PopupWindow(layout, windowWidth, windowHeight, false);
    fadePopup.showAtLocation(layout, Gravity.NO_GRAVITY, 0, 0);
    return fadePopup;
}

প্রায় আমার জন্য কাজ করে ... কখনও কখনও, এমন একটি দৌড়ের শর্ত রয়েছে যেখানে পপআপ উইন্ডো ম্লান / ডামি পপআপ উইন্ডোর পিছনে থাকে। এখনও কোনও কাজ খুঁজে পাওয়া যায় নি ... এমনকি বিলম্বিত ব্যক্তির পিছনে সময় দেওয়ার জন্য পপআপ উইন্ডো প্রদর্শন করতে বিলম্ব
করাও

4
@ একনাই আমি এই সমস্যার সমাধান পেয়েছি। আমি প্রথমে 'বিবর্ণ' পপআপ প্রদর্শন করি এবং তারপরে দ্বিতীয় পপআপটি দেখানোর জন্য আমি myFadePopup.getContentView ()। পোস্ট (... আমারপপআপ.শোঅ্যাটলোকেশন ...) ব্যবহার করছি;
পাইওটার

5

আমি এর জন্য একটি সমাধান খুঁজে পেয়েছি

একটি কাস্টম স্বচ্ছ ডায়ালগ তৈরি করুন এবং সেই কথোপকথনের ভিতরে পপআপ উইন্ডোটি খুলুন:

dialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar);
emptyDialog = LayoutInflater.from(context).inflate(R.layout.empty, null);

/* blur background*/
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();  
lp.dimAmount=0.0f;  
dialog.getWindow().setAttributes(lp);  
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 
dialog.setContentView(emptyDialog);
dialog.setCanceledOnTouchOutside(true);
dialog.setOnShowListener(new OnShowListener()
{
    @Override
    public void onShow(DialogInterface dialogIx)
    {
        mQuickAction.show(emptyDialog); //open the PopupWindow here
    }
});
dialog.show();

কথোপকথনের জন্য এক্সএমএল (R.layout.empty):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="match_parent" android:layout_width="match_parent"
     style="@android:style/Theme.Translucent.NoTitleBar" />

পপআপ উইন্ডো খারিজ হয়ে গেলে আপনি এখন ডায়ালগটি খারিজ করতে চান। তাই

mQuickAction.setOnDismissListener(new OnDismissListener()
{
    @Override
    public void onDismiss()
    {
        if(dialog!=null)
        {
            dialog.dismiss(); // dismiss the empty dialog when the PopupWindow closes
            dialog = null;
        }
    }
});

দ্রষ্টব্য: আমি NewQuickActionএখানে পপআপ উইন্ডো তৈরির জন্য প্লাগইন ব্যবহার করেছি । এটি স্থানীয় পপআপ উইন্ডোতেও করা যেতে পারে


1

আমার জন্য, আবদেলহাক মৌআমাউয়ের উত্তরগুলির মতো কিছু কাজ করে যা এপিআই 16 এবং 27 স্তরের পরীক্ষিত।

popupWindow.getContentView().getParent()ফলাফলটি ব্যবহার এবং ing ালাইয়ের পরিবর্তে View(যা এপিআই স্তরের 16 টি ক্র্যাশ করে কারণ এটি সেখানে কোনও ViewRootImplবস্তু দেয় যা এর উদাহরণ নয় View) আমি কেবল ব্যবহার করি .getRootView()যা ইতিমধ্যে একটি ভিউ দেয়, সুতরাং সেখানে কোনও ingালাই প্রয়োজন নেই।

আশা করি এটি কাউকে সাহায্য করবে :)

অন্যান্য স্ট্যাকওভারফ্লো পোস্টগুলি থেকে সম্পূর্ণ কাজের উদাহরণ একসাথে স্ক্র্যাম্বল হয়েছে, কেবল এটির অনুলিপি করুন, উদাহরণস্বরূপ, একটি বোতামের অন ক্লিক ক্লিককারীতে:

// inflate the layout of the popup window
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
if(inflater == null) {
    return;
}
//View popupView = inflater.inflate(R.layout.my_popup_layout, null); // this version gives a warning cause it doesn't like null as argument for the viewRoot, c.f. /programming/24832497 and /programming/26404951
View popupView = View.inflate(MyParentActivity.this, R.layout.my_popup_layout, null);

// create the popup window
final PopupWindow popupWindow = new PopupWindow(popupView,
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT,
        true // lets taps outside the popup also dismiss it
        );

// do something with the stuff in your popup layout, e.g.:
//((TextView)popupView.findViewById(R.id.textview_popup_helloworld))
//      .setText("hello stackoverflow");

// dismiss the popup window when touched
popupView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            popupWindow.dismiss();
            return true;
        }
});

// show the popup window
// which view you pass in doesn't matter, it is only used for the window token
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
//popupWindow.setOutsideTouchable(false); // doesn't seem to change anything for me

View container = popupWindow.getContentView().getRootView();
if(container != null) {
    WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
    WindowManager.LayoutParams p = (WindowManager.LayoutParams)container.getLayoutParams();
    p.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
    p.dimAmount = 0.3f;
    if(wm != null) {
        wm.updateViewLayout(container, p);
    }
}

1
findViewById(R.id.drawer_layout).setAlpha((float) 0.7);

R.id.drawer_layout আপনি যে উজ্জ্বলতাটি ম্লান করতে চান সেই বিন্যাসের আইডি।


0

আপনি এটি করতে ব্যবহার করতে পারেন android:theme="@android:style/Theme.Dialog"। একটি ক্রিয়াকলাপ তৈরি করুন এবং আপনার AndroidManifest.xmlক্রিয়াকলাপটিকে সংজ্ঞায়িত করুন:

    <activity android:name=".activities.YourActivity"
              android:label="@string/your_activity_label"
              android:theme="@android:style/Theme.Dialog">

এটি কৌশলটি বলে মনে হচ্ছে না। আমি এটি আমার একমাত্র ক্রিয়াকলাপে প্রয়োগ করেছি, যা আমি যখন একটি পপআপ উইন্ডো দেখি যা আমার কাছে একটি স্ফীত লেআউট থাকে তবে আলাদা কার্যকলাপ নয়। কীভাবে আমি পপআপ উইন্ডোতে FLAG_BLUR_BEHIND প্রয়োগ করব?
k_day

0

ঠিক আছে, তাই আমি আহমডাউন অনুসরণ করি যখন পপ উইন্ডো খোলা থাকে তখন পটভূমি ক্রিয়াকলাপটি জন্য উত্তর । তবে এটি আমার জন্য সমস্যা সৃষ্টি করে। এটি ক্রমহ্রাসমান ক্রিয়াকলাপ ছিল এবং এতে পপআপ উইন্ডো অন্তর্ভুক্ত ছিল (অর্থাত্ ক্রিয়াকলাপ এবং পপআপ উভয়কেই ম্লান-কালো স্তরযুক্ত, এটি তাদের আলাদা করা যায় না)।

সুতরাং আমি এইভাবে চেষ্টা করেছি,

ম্লান প্রভাবের জন্য একটি ডিমিং_ব্ল্যাক.এক্সএমএল ফাইল তৈরি করুন ,

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#33000000" />
</shape>

এবং হিসাবে যোগ backgroundমধ্যে FrameLayoutরুট XML ট্যাগ হিসেবে এছাড়া আমার অন্যান্য নিয়ন্ত্রণগুলি করা LinearLayoutভালোlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/ff_drawable_black">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="bottom"
        android:background="@color/white">

        // other codes...
    </LinearLayout>

</FrameLayout>

শেষ পর্যন্ত আমি MainActivityনীচে কিছু অতিরিক্ত প্যারামিটার সেট সহ আমার উপর পপআপ দেখাব ।

           //instantiate popup window
            popupWindow = new PopupWindow(viewPopup, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, true);

            //display the popup window
            popupWindow.showAtLocation(layout_ff, Gravity.BOTTOM, 0, 0);

ফলাফল: এখানে চিত্র বর্ণনা লিখুন

এটি আমার পক্ষে কাজ করে, বাডোর মন্তব্য অনুসারে সমস্যার সমাধানও করে । এটি Actionbarদিয়েও ম্লান করা যায়।

পিএস আমি আহহমডোনকে ভুল বলছি না । আমি তার উত্তরটি ফর্ম শিখেছি এবং আমার সমস্যার জন্য বিকাশের চেষ্টা করেছি। আমিও বিভ্রান্ত হয়েছি যে এটি একটি ভাল উপায় বা না।

আমার খারাপ ইংরাজির জন্য কোনও পরামর্শেরও প্রশংসা করা হয়েছে।


0

হয়তো এই রেপো আপনার জন্য সহায়তা করবে: বেসপপআপ

এটি আমার রেপো, যা পপআপ উইন্ডোর বিভিন্ন সমস্যার সমাধান করতে ব্যবহৃত হয়।

গ্রন্থাগারটি ব্যবহারের ক্ষেত্রে, যদি আপনার পটভূমিটি ঝাপসা করার প্রয়োজন হয় তবে কেবল কল করুন setBlurBackgroundEnable(true).

আরও তথ্যের জন্য উইকি দেখুন (zh-cn এ ভাষা)

বেসপপআপ: উইকি


-1

এই কোড কাজ

        pwindo = new PopupWindow(layout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
        pwindo.showAtLocation(layout, Gravity.CENTER, 0, 0);
        pwindo.setOutsideTouchable(false);

        View container = (View) pwindo.getContentView().getParent();
        WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams p = (WindowManager.LayoutParams) container.getLayoutParams();
        p.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
        p.dimAmount = 0.3f;
        wm.updateViewLayout(container, p);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.