Java 自定义测量视图中的奇怪问题
我有一个从Java 自定义测量视图中的奇怪问题,java,android,android-relativelayout,layoutparams,onmeasure,Java,Android,Android Relativelayout,Layoutparams,Onmeasure,我有一个从RelativeLayout扩展的自定义视图,其中大小应为正方形,还有一个背景图像,其宽度和高度应与子视图的宽度和高度一致。还有一个按钮应该水平居中,并与背景图像的底部对齐 这一切都很好,直到我添加了一些边距并将设备旋转到横向模式。在横向模式下,容器的宽度以某种方式大于其高度,如下所示: 自定义视图只是从RelativeLayout扩展而来的一个简单类,我已经覆盖了它的onMeasure方法,如下所示: @Override protected void onMeasure(int
RelativeLayout
扩展的自定义视图,其中大小应为正方形,还有一个背景图像,其宽度和高度应与子视图的宽度和高度一致。还有一个按钮应该水平居中,并与背景图像的底部对齐
这一切都很好,直到我添加了一些边距并将设备旋转到横向模式。在横向模式下,容器的宽度以某种方式大于其高度,如下所示:
自定义视图只是从RelativeLayout扩展而来的一个简单类,我已经覆盖了它的onMeasure
方法,如下所示:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int size = Math.min(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
int specSize = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
super.onMeasure(specSize, specSize);
measureChild(bgImage, specSize, specSize); // bgImage is the flower image
setMeasuredDimension(size, size);
}
以及视图的布局:
有人能指出我做错了什么吗?如果这个问题以前有人回答过,有人能给我一个链接吗?在搜索之后,我似乎没有发现任何类似的问题。我正在为API 11进行开发,并在运行安卓4.04的三星Galaxy Tab 8.9上进行测试
谢谢 移除
measureChild(bgImage、specSize、specSize)代码>和<代码>设置测量尺寸(尺寸,尺寸)代码>行。我删除了这些行,问题仍然存在。图像有多大?删除adjustViewBounds
属性。我已经删除了adjustViewBounds
属性,没有任何更改。图像的原始大小为512x512。在视图中,回显MeasureSpec.getSize()
使我的宽度和高度都增加了600+。横向模式下的额外空间大致相当于我拥有的边距的两倍。我是否应该考虑<代码>中的余量> >?页边是在视图之外,所以它不应该影响尺寸。您是否测量了图像视图的尺寸?我的意思是在调用自定义RelativeLayout
中的super.onMeasure()
后,查看getMeasuredWidth/Height()
的ImageView的getMeasuredWidth/Height()
与自定义组件的实际getMeasuredWidth/Height()
的值进行比较。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" android:background="#eff1f1" android:padding="1dp">
<com.example.MyViewGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#e54eff"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" android:layout_margin="50dp">
<ImageView
android:id="@+id/myPic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
android:src="@drawable/flower"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/button" android:layout_alignBottom="@+id/myPic" android:layout_centerHorizontal="true"/>
</com.example.MyViewGroup>
</RelativeLayout>