我正在尝试显示一个类,它在屏幕顶部扩展了View,在xml布局中显示了两个texviews和下面的按钮,但是只显示了没有下面按钮的视图,或者下面的视图和按钮显示如果我将视图高度硬编码为400dp,任何帮助都会非常感激,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent">
<view class="....MyView"
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" //"400dp"
/>
<LinearLayout
android:id="@+id/graphCntrls"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/myView"
>
<TextView
android:id="@+id/tvXCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="x coordinate"/>
<TextView
android:id="@+id/tvYCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="y coordinate"/>
<Button
android:id="@+id/coordsCalcBttn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="Calc" />
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:1)
CustomView的默认大小为0.除非它有子视图(并且是从定义onLayout
的布局类派生的),在这种情况下,默认大小是其子项的总和。
如果您想在不仅包含子视图集合的自定义视图上使用wrap_content
,则需要覆盖onLayout()
和/或onMeasure()
以下是解决方法:
<xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/rl"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<com.droid.pmk.stackoverflow1.MyView
android:id="@+id/myView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ccc"
/>
<LinearLayout
android:id="@+id/graphCntrls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/myView"
android:orientation="vertical"
>
<TextView
android:id="@+id/tvXCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x coordinate"
android:textColor="@android:color/black"/>
<TextView
android:id="@+id/tvYCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="y coordinate"
android:textColor="@android:color/black"/>
<Button
android:id="@+id/coordsCalcBttn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calc"
android:textColor="@android:color/black"/>
</LinearLayout>
</LinearLayout>
如果要在自定义视图中更改View的默认行为,则需要覆盖onMeasure。因此,测量CustomView是布局过程的一部分,其中包括两个主要步骤:measuring and layouting
度量过程设置视图的大小,视图的大小,以及布局过程设置视图的位置,视图的位置。
布局部分仅对有孩子的视图感兴趣,换句话说,继承自ViewGroup
的视图。
因此,如果您将CustomView
置于LinearLayout
之下,那么它可以正常运行。但是您的View将位于布局之下,根据您的布局需求,这是不受欢迎的。
<RelativeLayout
android:id="@+id/rl"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<LinearLayout
android:id="@+id/graphCntrls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/tvXCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x coordinate"
android:textColor="@android:color/black"/>
<TextView
android:id="@+id/tvYCoord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="y coordinate"
android:textColor="@android:color/black"/>
<Button
android:id="@+id/coordsCalcBttn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calc"
android:textColor="@android:color/black"/>
</LinearLayout>
<com.droid.pmk.stackoverflow1.MyView
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="0px"
android:layout_below="@id/graphCntrls"
android:background="#ccc"
/>
</RelativeLayout>
这表明wrap_content
将授予您MyView
根据需要获取尽可能多的RelativeLayout的权限。在你的情况下,整个屏幕都是左边的。
我希望它有所帮助。