SlidingMenue布局问题
来源:互联网 发布:民治数据 编辑:程序博客网 时间:2024/05/27 01:31
SlidingMenue布局问题
项目中用到SlidingMenue,最开始是继承自SlidingActivity,但是在有物理虚拟键存在的时候底部按钮无法显示,其实是SlidingMenue是从手机虚拟键的底部开始显示侧边栏的。
解决方法:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager().beginTransaction().add(R.id.content,mainF).commit(); initSlidingMenu(savedInstanceState); }
/** * 初始化侧边栏 * @param savedInstanceState */ private void initSlidingMenu(Bundle savedInstanceState){ //设置左侧滑动菜单 //setBehindContentView(R.layout.menu_frame_left); SlidingMenu sm=new SlidingMenu(this);// getSupportFragmentManager().beginTransaction()// .replace(R.id.menu_frame, new LeftFragment()).commit(); sm.setMode(SlidingMenu.LEFT); // 设置滑动阴影的宽度 sm.setShadowWidthRes(R.dimen.shadow_width); // 设置滑动菜单阴影的图像资源 sm.setShadowDrawable(null); // 设置滑动菜单视图的宽度 sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); // 设置渐入渐出效果的值 sm.setFadeDegree(0.35f); // 设置触摸屏幕的模式,这里设置为全屏 sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // 设置下方视图的在滚动时的缩放比例 sm.setBehindScrollScale(0.0f); sm.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); sm.setMenu(R.layout.menu_frame_left); FrameLayout fm= (FrameLayout) sm.findViewById(R.id.menu_frame); getSupportFragmentManager().beginTransaction() .replace(fm.getId(), new LeftFragment()).commit(); }
还有一种方法:布局通过判断是否存在物理虚拟键,如果存在就减去物理虚拟键的高度
/** * 检查是否存在虚拟按键栏 * @param context * @return */ private static boolean hasNavBar(Context context) { Resources res = context.getResources(); int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android"); if (resourceId != 0) { boolean hasNav = res.getBoolean(resourceId); // check override flag String sNavBarOverride = getNavBarOverride(); if ("1".equals(sNavBarOverride)) { hasNav = false; } else if ("0".equals(sNavBarOverride)) { hasNav = true; } return hasNav; } else { // fallback return !ViewConfiguration.get(context).hasPermanentMenuKey(); } } /** * 判断虚拟按键栏是否重写 * @return */ private static String getNavBarOverride() { String sNavBarOverride = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { try { Class c = Class.forName("android.os.SystemProperties"); Method m = c.getDeclaredMethod("get", String.class); m.setAccessible(true); sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys"); } catch (Throwable e) { } } return sNavBarOverride; }
然后获取其高度:
/** * 获取虚拟按键栏高度 * @param context * @return */ public static int getNavigationBarHeight(Context context) { int result = 0; if (hasNavBar(context)){ Resources res = context.getResources(); int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { result = res.getDimensionPixelSize(resourceId); } } return result; }
然后布局减掉物理虚拟键的高度:
//如果存在物理虚拟键 if(hasNavBar(context)){ int height=getNavigationBarHeight(context); MyLogUtils.error(height+"物理虚拟键高度"); //scanBtn.setHeight(DensityUtil.dip2px(context,40)+height); scanBtn.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,DensityUtil.dip2px(context,40)+height)); }else { scanBtn.setHeight(DensityUtil.dip2px(context,40)); }
0 0
- SlidingMenue布局问题
- 布局问题
- 布局问题
- 界面开发布局问题
- 样式布局问题
- JueryTools overlay 布局问题
- div 布局问题 一
- RelativeLayout布局问题
- android 布局问题总结
- 布局问题(一)
- 布局居中问题
- div布局的问题
- windows8中的布局问题
- 有关布局问题
- html布局问题
- IOS 布局开发问题
- vs2012布局问题
- Android 解决布局问题
- php socket function
- Protocol Buffer
- c++作业4
- c#高级编程
- Servlet 作业
- SlidingMenue布局问题
- C++实验4——输出星号图
- 走近人脸检测:从VJ到深度学习(下)
- c++第四次上机实验
- 24. Swap Nodes in Pairs
- 欢迎使用CSDN-markdown编辑器
- php 异常获取
- Mysql分区
- Linux进程详解