我使用SlidingMenu来实现我的滑入式菜单.
代码是
Run Code Online (Sandbox Code Playgroud)private void initSlidingMenu() { // configure the SlidingMenu menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowWidthRes(R.dimen.shadow_width); // menu.setShadowDrawable(R.drawable.shadoew); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // menu.setFadeDegree(0.35f); menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); menu.setMenu(R.layout.menu_main_sliding); }
然后我遇到的问题是导航栏背后的布局.


我将SlidingMenu.SLIDING_WINDOW更改为SlidingMenu.SLIDING_CONTENT.这是有效的,但动作栏总是在顶部.
看看SlidingMenu的源代码,我找到这个代码来添加slidemenu.
switch (slideStyle) {
case SLIDING_WINDOW:
mActionbarOverlay = false;
ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView();
ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
// save ActionBar themes that have transparent assets
decorChild.setBackgroundResource(background);
decor.removeView(decorChild);
decor.addView(this);
setContent(decorChild);
break;
case SLIDING_CONTENT:
mActionbarOverlay = actionbarOverlay;
// take the above view out of
ViewGroup contentParent = (ViewGroup)activity.findViewById(android.R.id.content);
View content …Run Code Online (Sandbox Code Playgroud) 我在Nexus等设备上遇到Android导航栏的问题.只需在所有没有硬件菜单按钮的设备上.
让我更详细地解释一下这个问题.
我有一个应用程序,其中有3个部分.内容,ActionBar和带有SeekBar的底部面板.

带有SeekBar的ActionBar和底部面板覆盖了内容.每次我点击内容时,ActionBar和带有SeekBar的底部面板都会消失.这完全符合它的工作方式.这是我用于隐藏系统UI的代码片段:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
actionBar.hide();
}
findViewById(R.id.read_book_bottom_bar).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
在onCreate我的活动方法中,我有这段代码:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在具有Android导航栏的设备上启动应用程序时,使用SeekBar显示底部面板时出现问题.简单来说,Android导航栏使用SeekBar覆盖底部面板.这是一个截图:

但每次我点击内容时,Android导航栏都会随着ActionBar和带有SeekBar的底部面板一起消失.所以,问题在于,每当有人想在NEXUS等设备上使用底层面板和SeekBar时,他/她将无法使用它,因为它隐藏在Android导航栏下.
有人可以帮我解决这个问题吗?谢谢大家.
我正在使用AppCompat v21Style"NoActionBar"并添加一个Action/Toolbar onCreate.
还添加了Feinstein的SlidingMenu,这导致了Activity(因此内部片段)与Android的导航按钮重叠的问题(它没有完全显示,在底部被切断)
如果我添加:
android:layout_marginBottom="48dp"
Run Code Online (Sandbox Code Playgroud)
在布局中,一切都是可见的(当然).
在Android 4.4上.一切都正常显示.
使用支持lib在Android L上我缺少什么?
SlidingMenu在onCreate中添加:
super.onCreate(..)
setContentView(..)
menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
menu.setMenu(R.layout.menu);
menu.setBehindWidthRes(200dp);
Run Code Online (Sandbox Code Playgroud)
解:
这个问题在这里说明https://github.com/jfeinstein10/SlidingMenu/issues/680(包括解决方案)
Slding Menu to SLIDING_CONTENT
OR: update the SlidingMenu source like mentioned in the link aboce
Run Code Online (Sandbox Code Playgroud)
更好的解决方案:(
也在5.0上使用三星设备) - 由withaay提供
将以下行添加到SlidingMenu构造函数对我有用.我没有必要进行任何其他代码更改.
Run Code Online (Sandbox Code Playgroud)if(Build.VERSION.SDK_INT >= 21) setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)
android android-appcompat android-actionbaractivity jfeinstein android-5.0-lollipop