Я хотел бы установить layout_weight из TextView
с tv_long_text до 80% в следующем LinearLayout
из вертикальной ориентации.Android установить максимальную ширину в процентах от TextView в 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 является вертикальной.
Итак, я попытался установить android:layout_width="match_parent"
в XML, а затем установить ширину во время выполнения, получая измеренную ширину, а затем устанавливает ширину до 80%, но getMeasuredWidth
дает мне 0.
int measuredWidth = longTextView.getMeasuredWidth();
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) longTextView.getLayoutParams();
params.width = (int) (measuredWidth * 0.8);
longTextView.setLayoutParams(params);
Я также пытался установить layout_weight во время выполнения, но это тоже не сработало, и это, вероятно, потому, что это родительский вид в вертикальной ориентации.
longTextView.setLayoutParams(
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT,
0.8f)
);
Тот, который работал для меня, добавив некоторые дополнительные взгляд для длительного просмотра текста. Но добавлено еще 2 дополнительных просмотров, просто пытающихся установить ширину этого представления в процентах. Есть ли другой эффективный способ сделать это?
<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" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_long_text"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="0.8"
android:textStyle="bold"
tools:text="a pretty long text" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"/>
</LinearLayout>
</LinearLayout>
все еще есть этот дополнительный LinearLayout обертка: P –
'LinearLayout' обертка с правой стороны остается, что-то должно, так как 80% пространства используется, но' TextView' составляет 80%, а когда вы показываете какой-то текст, только эта область будет использоваться :) –