Android在垂直方向的LinearLayout中设置TextView百分比的最大宽度

时间:2017-01-25 16:28:51

标签: android android-linearlayout android-layout-weight

我想将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)
);

3 个答案:

答案 0 :(得分:5)

我不会试图改变运行时测量。具有第二个水平布局的解决方案非常精细,因为您有两个水平扩展的TextView 另一个选项是来自支持库http://ryandesk.xyz PercentRelativeLayout

See here

这是来自文档

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>