我想将TextView
的 layout_weight 与 tv_long_text 设置为以下LinearLayout
垂直方向。
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_short_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
tools:text="short text" />
<TextView
android:id="@+id/tv_long_text"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="0.8"
tools:text="a pretty long text" />
</LinearLayout>
以上操作无效,因为textview的父级的方向是垂直的。
所以,我尝试在xml中设置android:layout_width="match_parent"
,然后通过获取测量的宽度在运行时设置宽度,然后将宽度设置为80%但是{{ 1}}给我0。
getMeasuredWidth
我还尝试在运行时设置 layout_weight ,但它也没有工作,这可能是因为它的父视图处于垂直方向。< / p>
int measuredWidth = longTextView.getMeasuredWidth();
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) longTextView.getLayoutParams();
params.width = (int) (measuredWidth * 0.8);
longTextView.setLayoutParams(params);
对我有用的是为长文本视图添加一些额外视图。但是,为了尝试以百分比设置此视图的宽度,又添加了2个额外的视图。 还有其他有效方法吗?
longTextView.setLayoutParams(
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT,
0.8f)
);
答案 0 :(得分:5)
我不会试图改变运行时测量。具有第二个水平布局的解决方案非常精细,因为您有两个水平扩展的TextView
另一个选项是来自支持库http://ryandesk.xyz
PercentRelativeLayout
这是来自文档
com.android.support:percent:25.1.0
答案 1 :(得分:2)
使用android:layout_weight
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<android.support.v4.widget.Space
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"/>
</LinearLayout>
TRY这种结构让TextView只能流过屏幕宽度的75%。 你可以调整SPACER宽度来实现,你想要的是50%的2。
答案 2 :(得分:1)
您可以使用android:weightSum
,并且无需额外View
即可获得相同的结果:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="10"
android:orientation="vertical">
<TextView
android:id="@+id/tv_short_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
tools:text="short text" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="10">
<TextView
android:id="@+id/tv_long_text"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="8"
android:textStyle="bold"
tools:text="a pretty long text a pretty long text a pretty long text" />
</LinearLayout>
</LinearLayout>