2

J'utilise les codes suivants pour créer un PopupWindow avec un fond sombre en cliquant sur un élément de menu dans Toolbar:Dimmed Contexte de popupWindow exclut les barres d'outils/barres d'action

@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); 
    } 
} 

Cependant, je veux l'arrière-plan sombre pour exclure la barres d'action/barres d'outils. Comment puis-je y arriver?

La mise en page du PopupView est comme suit:

<?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

vous voulez actionbar/barre d'outils comme désactiver ou tout simplement de ne pas être grisés? – user1140237

+0

Je ne veux pas que la barre d'outils/barre d'outils soit désactivée ou grisée. Je veux juste le laisser tel quel. – Raptor

Répondre

1

si vous voulez fenêtre pour afficher avec un fond sombre, sauf ToolBar/ActionBar

ici i essayé de placer la position de la fenêtre pop-up. chercher statusbar & navigation hauteur de la barre & réglage de la position Y à la fenêtre contextuelle

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); 

Une autre façon pour afficher pop-up que vous avez dit dans comment.Below vous avez mentionné pouvez

Prenez un contrôle caché (TextView) dans mise en page qui sera aligné vers le haut. Prenez l'emplacement du TextView & attribué position Y à fenêtre contextuellle

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]); 
    } 
} 

fichier XML du fragment qui est goint pour afficher

<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

semble prometteur. Merci ! – Raptor

0

J'ai une solution, mais je ne test avec DialogFragment, non Assurez-vous que cela fonctionne avec le dialogue ou non. Je le publierai quand même:
1. crée ta propre classe qui étend DialogFragment.
2. créer un fichier xml avec votre couleur sombre conçu:

<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. Remplacer funcions dans votre DialogFragment:

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); 
    } 
}