使自定义视图使用布局权重
Make custom view use layout weight
我正在尝试制作具有以下布局的 android 应用程序
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.CustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center"
android:id="@+id/customView" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:weightSum="2"
android:orientation="horizontal">
<TextView
android:id="@+id/TopLeftText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/TopRightText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:weightSum="2"
android:orientation="horizontal">
<TextView
android:id="@+id/BottomLeftText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/BottomRightText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
并且应该像这样布置
+---+---+
| |
| |
| |
| c |
| |
| |
| |
+---+---+
| | |
| t | t |
| | |
+---+---+
| | |
| t | t |
| | |
+---+---+
其中 c 是我的自定义视图,t 是文本视图。我已经设法在垂直模式下使用一种线性布局将文本视图置于网格中,并将其子 layout_weights 设置为 1,然后将水平模式下的子线性布局及其布局权重为 1 的子文本视图。但是出于某种原因,即使设置了权重,我似乎也无法让我的自定义视图共享一半的线性布局。我的屏幕目前看起来更像:
+---+---+
| |
| |
| |
| |
| |
| c |
| |
| |
| |
| |
| |
| |
| |
+---+---+
| t | t |
+---+---+
| t | t |
+---+---+
似乎我所做的一切都没有使这个视图占据一半的高度。我的观点类似于:
class CustomView extends View {
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
protected void onDraw(Canvas canvas) {
// here I just have some code to fill the view in with solid colour
}
}
class 是从 XML 文件构建的,我试过弄乱 layout_width、layout_height、layout_weight、layout_gravity 但似乎没有什么可以解决的。将不胜感激任何想法
在使用权重时,您应该使用 height/width 的 0dp
。使用 wrap_content
有时会导致意外结果。
我正在尝试制作具有以下布局的 android 应用程序
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.CustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center"
android:id="@+id/customView" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:weightSum="2"
android:orientation="horizontal">
<TextView
android:id="@+id/TopLeftText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/TopRightText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:weightSum="2"
android:orientation="horizontal">
<TextView
android:id="@+id/BottomLeftText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/BottomRightText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
并且应该像这样布置
+---+---+
| |
| |
| |
| c |
| |
| |
| |
+---+---+
| | |
| t | t |
| | |
+---+---+
| | |
| t | t |
| | |
+---+---+
其中 c 是我的自定义视图,t 是文本视图。我已经设法在垂直模式下使用一种线性布局将文本视图置于网格中,并将其子 layout_weights 设置为 1,然后将水平模式下的子线性布局及其布局权重为 1 的子文本视图。但是出于某种原因,即使设置了权重,我似乎也无法让我的自定义视图共享一半的线性布局。我的屏幕目前看起来更像:
+---+---+
| |
| |
| |
| |
| |
| c |
| |
| |
| |
| |
| |
| |
| |
+---+---+
| t | t |
+---+---+
| t | t |
+---+---+
似乎我所做的一切都没有使这个视图占据一半的高度。我的观点类似于:
class CustomView extends View {
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
protected void onDraw(Canvas canvas) {
// here I just have some code to fill the view in with solid colour
}
}
class 是从 XML 文件构建的,我试过弄乱 layout_width、layout_height、layout_weight、layout_gravity 但似乎没有什么可以解决的。将不胜感激任何想法
在使用权重时,您应该使用 height/width 的 0dp
。使用 wrap_content
有时会导致意外结果。