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
原创粉丝点击