2016-06-08 37 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配置和覆盖他们。