您的位置:首页 > 移动开发 > Android开发

Android平板横屏上的DrawerLayout

2017-06-27 16:53 162 查看

Android平板横屏展示的DrawerLayout

这个app是一直横屏展示的,之后有一个DrawerLayout,我直接使用官方的DrawerLayout,我设置drawerLayout的高度
match-parent
,指定宽度320dp,但很不幸,运行到平板上就崩溃了,DrawerLayout一直提示这个错误:
DrawerLayout must be measured with MeasureSpec.EXACTLY.
。我查看源码发现这个错误是在drawerLayout的onMeasure中抛出的。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);

if (widthMode != MeasureSpec.EXACTLY || heightMode != MeasureSpec.EXACTLY) {
if (isInEditMode()) {
// Don't crash the layout editor. Consume all of the space if specified
// or pick a magic number from thin air otherwise.
// TODO Better communication with tools of this bogus state.
// It will crash on a real device.
if (widthMode == MeasureSpec.AT_MOST) {
widthMode = MeasureSpec.EXACTLY;
} else if (widthMode == MeasureSpec.UNSPECIFIED) {
widthMode = MeasureSpec.EXACTLY;
widthSize = 300;
}
if (heightMode == MeasureSpec.AT_MOST) {
heightMode = MeasureSpec.EXACTLY;
} else if (heightMode == MeasureSpec.UNSPECIFIED) {
heightMode = MeasureSpec.EXACTLY;
heightSize = 300;
}
} else {
throw new IllegalArgumentException(
"DrawerLayout must be measured with MeasureSpec.EXACTLY.");
}
}


之后在翻墙找到答案,需要我们重写DrawerLayout的onMeasure方法

public class CustomDrawerLayout extends DrawerLayout {

public CustomDrawerLayout(Context context) {
super(context);
}

public CustomDrawerLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(
MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(
MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

}


drawerlayout比较详细的文章:android官方侧滑菜单DrawerLayout详解

记录一下用到的一个垂直滑动的ViewPager

垂直滑动ViewPager

如果你的平板模拟器,无法上网,请参考这个博客,设置你的dns,之后重启模拟器,就可以上网了。

使用空格布局,请不要直接在布局中使用空格,使用编号,这样可以处理全角、半角等空格,而且不会被合并,全角空格占一个中文字符,半角空格占半个中文字符。
代表一个全角空格,
代表一个半角空格。

可参考文章android空格对齐

今天就记这些吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android android平板