我的应用程序使用ListView,每个列表项具有以下布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.myapp.Square
android:layout_width="100dp"
android:layout_height="100dp"/>
</RelativeLayout>
Square是一个带有被覆盖的onMeasure()
的自定义视图,在尺寸设置为match_parent
的情况下,允许它在保持正方形的同时填充屏幕的较小尺寸。 ListView中不需要此功能,但它在应用程序的其他位置使用。
@Override
protected void onMeasure(int w, int h) {
if (getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
super.onMeasure(h, h);
} else {
super.onMeasure(w, w);
}
}
结果是正方形的尺寸为零,仅在横向上(即,当高度用作宽度时)。在下列情况下,问题就消失了:
正如您所看到的,这是一个非常具体的案例。
我的猜测是问题与被处理的ListView元素的高度不同于宽度有关,因为ListView元素被强制匹配其内容的高度。但是,由于此处明确指定了内容的高度,因此应该没有问题;在任何情况下,这都不能解释LinearLayout和RelativeLayout之间的不同行为。
该问题有直接的解决方法(例如,不对ListViews中的方块使用自定义onMeasure()
),但我想更好地理解这个问题。
这里发生了什么?
答案 0 :(得分:0)
试试这种方式
@Override
protected void onMeasure(int w, int h) {
if (getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
super.onMeasure(h, h);
setMeasuredDimension(MeasureSpec.getSize(h), MeasureSpec.getSize(h));
} else {
super.onMeasure(w, w);
setMeasuredDimension(MeasureSpec.getSize(w), MeasureSpec.getSize(w));
}
}