Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义测量视图中的奇怪问题_Java_Android_Android Relativelayout_Layoutparams_Onmeasure - Fatal编程技术网

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>