2016-06-08 68 views
1

我使用Sliding Activity, View不適合屏幕,它隱藏在導航欄後面。查看隱藏在導航欄後面android

我試過,

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

但沒有任何工程。

這裏小吃吧是隱藏的導航欄背後: enter image description here

+0

請發佈您的XML。 –

回答

0

嘿最佳實踐的研究是使用THA NavigationDrawer,但對於你的問題創建一個類CustomSlidingMenu延伸SlidingMenu覆蓋方法是這樣的。然後使用CustomSlidingMenu,而不是SlidingMenu,它應該正常工作

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

我假設你使用AppCompat用我的方法,那麼原因是由SlidingMenu設置的墊襯有衝突與AppCompat配置和覆蓋他們。