2016-06-08 14 views
1

Ich verwende Sliding Activity, die Ansicht passt nicht auf den Bildschirm, es ist hinter der Navigationsleiste versteckt.Anzeigen Verbergen hinter Navigationsleiste Android

Ich habe versucht,

<item name="android:fitsSystemWindows">true</item> 
<item name="android:windowDrawsSystemBarBackgrounds">false</item> 

aber nichts funktioniert.

hier Snackbar befindet sich hinter der Navigationsleiste versteckt: enter image description here

+0

Bitte posten Sie Ihre XML. –

Antwort

0

Hey besten practive tha NavigationDrawer zu verwenden wäre, aber für Ihr Problem eine Klasse CustomSlidingMenu schaffen, die SlidingMenu und Aufschalten Methoden wie diese erstreckt. Dann nutzen Sie die CustomSlidingMenu statt SlidingMenu und es sollte funktionieren

public class CustomSlidingMenu extends SlidingMenu { 
    private boolean mActionbarOverlay = false; 

    public CustomSlidingMenu(Context context) { 
     super(context); 
    } 

    public CustomSlidingMenu(Activity activity, int slideStyle) { 
     super(activity, slideStyle); 
    } 

    public CustomSlidingMenu(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomSlidingMenu(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @SuppressLint("NewApi") 
    @Override 
    protected boolean fitSystemWindows(Rect insets) { 
     if (mActionbarOverlay) return true; 

     setMyPadding(insets); 
     return true; 
    } 

    @TargetApi(Build.VERSION_CODES.KITKAT_WATCH) 
    @Override 
    public WindowInsets onApplyWindowInsets(WindowInsets insets) { 
     if (mActionbarOverlay) return insets.consumeSystemWindowInsets(); 

     Rect rect = new Rect(
       insets.getSystemWindowInsetLeft(), 
       insets.getSystemWindowInsetTop(), 
       insets.getSystemWindowInsetRight(), 
       insets.getSystemWindowInsetBottom() 
     ); 

     setMyPadding(rect); 

     return insets.consumeSystemWindowInsets(); 
    } 

    private void setMyPadding(Rect rect) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      WindowManager manager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 
      switch (manager.getDefaultDisplay().getRotation()) { 
       case Surface.ROTATION_90: 
       case Surface.ROTATION_270: 
        rect.right += getNavBarWidth(); 
        break; 
       case Surface.ROTATION_180: 
        rect.top += getNavBarHeight(); 
        break; 
       default: 
        rect.bottom += getNavBarHeight(); 
      } 
     } 

     setPadding(
       rect.left, rect.top, rect.right, rect.bottom 
     ); 
    } 

    private int getNavBarWidth() { 
     return getNavBarDimen("navigation_bar_width"); 
    } 

    private int getNavBarHeight() { 
     return getNavBarDimen("navigation_bar_height"); 
    } 

    private int getNavBarDimen(String resourceString) { 
     Resources r = getResources(); 
     int id = r.getIdentifier(resourceString, "dimen", "android"); 
     if (id > 0) { 
      return r.getDimensionPixelSize(id); 
     } else { 
      return 0; 
     } 
    } 
} 

Ich gehe davon aus, dass Sie AppCompat mit meinem Ansatz verwenden, so ist der Grund, dass die eingestellte Polsterungen von der SlidingMenu sind in Konflikt mit den AppCompat Konfigurationen und Überschreiben sie.

Verwandte Themen