1

我遇到了修改后的 android 布局的问题。在我扩展了正常的相对布局使其自动变成正方形后,所有嵌入的其他视图都将消失。

      <namespace.SquareRelativeLayout
            android:layout_weight="1"
            android:id="@+id/firstBtn"
            android:background="#ff0000"
            android:clickable="true" 
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ImageView
                android:id="@+id/firstBtnImage"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/firstBtnDrawable" />
            <TextView
                android:id="@+id/firstBtnLabel"
                android:layout_alignParentBottom = "true"
                android:layout_centerHorizontal="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="10dp"
                android:textColor="#ffffff"
                android:text="@string/firstBtnlabel"
                android:textStyle="bold" />
        </namespace.SquareRelativeLayout>

但是文本视图和图像视图没有显示,即使它们在屏幕的任何位置。

我要感谢每一只母猪。

编辑:

   namespace namespace
{
    class SquareRelativeLayout : RelativeLayout
    {
        public SquareRelativeLayout (Context context, IAttributeSet attrs, int defStyle) : base (context, attrs, defStyle)
        {
        }

        public SquareRelativeLayout (Context context, IAttributeSet attrs) : base (context, attrs)
        {
        }

        public SquareRelativeLayout (Context context) : base (context)
        {

        }

        protected override void OnMeasure (int widthMeasureSpec, int heightMeasureSpec)
        {

            //Get canvas width
            int w = MeasureSpec.GetSize (widthMeasureSpec);
            base.SetMeasuredDimension (w, w);
        }
    }
}
4

1 回答 1

2

我解决了这个问题,在阅读了一百个或更多网站后,我对 android 视图和 layoutInflater 有了更好的理解。

但是解决方案很容易更换:

    int w = MeasureSpec.GetSize (widthMeasureSpec);
    base.SetMeasuredDimension (w, w);

base.OnMeasure (widthMeasureSpec, widthMeasureSpec);

这样可以保留父视图组,并可以添加子视图。

于 2013-10-23T07:45:11.270 回答