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空格对齐
今天就记这些吧!