2

我用下面的代碼通過點擊菜單項中Toolbar創建昏暗背景PopupWindowPopupWindow的變暗背景不包括工具欄/動作條

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.btn_1: 
      Log.i(TAG, "Clicked Button 1"); 
      LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
      View popupView = layoutInflater.inflate(R.layout.popup_window, null); 

      final PopupWindow popupWindow = new PopupWindow(popupView, Toolbar.LayoutParams.MATCH_PARENT, Toolbar.LayoutParams.MATCH_PARENT); 
      Button btnDismiss = (Button)popupView.findViewById(R.id.btn_dismiss); 
      btnDismiss.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        popupWindow.dismiss(); 
       } 
      }); 
      popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

不過,我想昏暗的背景排除行動酒吧/工具欄。我怎樣才能實現它?

PopupView的佈局如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <RelativeLayout 
     android:id="@+id/bac_dim_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#C0000000" 
     android:visibility="visible" > 
     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:layout_margin="1dp" 
      android:background="@android:color/darker_gray"> 
      > 
      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:layout_margin="20dp"> 
       <TextView 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="It's a PopupWindow" /> 
       <Button 
        android:id="@+id/btn_dismiss" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Dismiss" /> 
      </LinearLayout> 
     </LinearLayout> 
    </RelativeLayout> 
</LinearLayout> 
+0

變暗
2.您的設計暗色創建XML文件? – user1140237

+0

我不希望操作欄/工具欄被禁用或調暗。只是想保持原樣。 – Raptor

回答

1

,如果你想彈出窗口與工具欄除外/動作條

在這裏,我嘗試設置彈出窗口的位置昏暗的背景中顯示。取狀態欄&導航欄高度&組Y位置,以彈出

int actionBarHeight = 0; 
       View popupView = LayoutInflater.from(getActivity()).inflate(R.layout.popup_, null); 
       final PopupWindow popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); 
       actionBarHeight = getNavigationBarHeight(getActivity(), Configuration.ORIENTATION_PORTRAIT); 
       int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 
       if (resourceId > 0) { 
        actionBarHeight = actionBarHeight + getResources().getDimensionPixelSize(resourceId); 
       } 
       Button btnDismiss = (Button) popupView.findViewById(R.id.btn_dismiss); 
       btnDismiss.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         popupWindow.dismiss(); 
        } 
       }); 
       popupWindow.showAsDropDown(popupView, 0, actionBarHeight); 

另一種方式爲你comment.Below說提到的,你可以嘗試

取一個隱藏控件(TextView的)中顯示彈出佈局將與頂部對齊。取的TextView &分配Y位置的位置,以彈出窗口,該窗口是goint片段的

public class MyPopupTest extends Fragment{ 
    public static final String TAG = "MyPopupTest"; 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.home_screen_slider, container, false); 
    } 


    @Override 
    public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     view.findViewById(R.id.btnSelect).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showPopup(view); 
      } 
     }); 
    } 

    public void showPopup(View view) { 
     View popupView = LayoutInflater.from(getActivity()).inflate(R.layout.popup_, null); 
     final PopupWindow popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); 
     Button btnDismiss = (Button) popupView.findViewById(R.id.btn_dismiss); 
     btnDismiss.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       popupWindow.dismiss(); 
      } 
     }); 
     int[] locationOfHiddenTextView = new int[2]; 
     view.findViewById(R.id.hiddenTopTextView).getLocationOnScreen(locationOfHiddenTextView); 
     //Give Position as a start point for popup 
     popupWindow.showAsDropDown(popupView, 0, locationOfHiddenTextView[1]); 
    } 
} 

XML文件來顯示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relative_home" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffc699"> 


    <TextView 
     android:id="@+id/hiddenTopTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:visibility="gone" /> 

    <Button 
     android:id="@+id/btnSelect" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Show Popup" /> 

</RelativeLayout> 
+1

看起來很有希望。謝謝 ! – Raptor

0

我有一個解決方案,但我只測試與DialogFragment,不確保它可以與對話框一起工作。無論如何,我會發布它:
1.創建您自己的擴展DialogFragment的類。在DialogFragment

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#80000000" // your designed dim color 
      android:gravity="center" 
      android:orientation="vertical"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/goto_dialog_title" 
    android:textColor="@android:color/white" 
    android:textSize="@dimen/km_25sp"/> 

3.覆蓋funcions:

private class MyDialog extends DialogFragment{ 
    //override your onCreateView to show your xml here 

    //override onCreate to show dialog without border and without dim background 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NO_FRAME, 0); 
    } 
    // override to show dim background and avoid dimming actionbar 
    @Override 
    public void onResume() { 
     super.onResume(); 
     int statusBarAndActionBarHeight = 200; //u should calculate yourself 
     Window window = getDialog().getWindow(); 
     // set size to your dialog --> fullscreen size to show dim bg all screen except action bar and status bar 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     window.setLayout(displaymetrics.widthPixels, displaymetrics.heightPixels - statusBarAndActionBarHeight); 
     //margin top to avoid dim background above actionbar and status bar 
     WindowManager.LayoutParams p = window.getAttributes(); 
     p.y = statusBarAndActionBarHeight; 
     getDialog().getWindow().setGravity(Gravity.TOP); 
     getDialog().getWindow().setAttributes(p); 
    } 
} 
你想動作條/工具欄的禁用或只是沒有