如何根据宽度放置两个视图?

时间:2017-11-29 11:01:56

标签: android android-layout android-view android-constraintlayout

在我们的项目中,我们有这样一个案例:我们有两个文字视图(让我们说@id/text_view_1@id/text_view_2)。我们应该将它们水平放置(@id/text_view_1然后@id/text_view_2),如果它们的宽度小于其父级的宽度或垂直(text_view_2高于text_view_1),如果它们也是宽。 现在,我提出的最佳解决方案看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    android:layout_width="match_parent" 
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_view_above_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true" />

    <TextView
        android:id="@+id/text_view_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/text_view_2_right"
        android:layout_alignBottom="@+id/text_view_2_right"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/text_view_right_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_view_2_above"
        android:layout_toEndOf="@+id/text_view_1" />

</RelativeLayout>

以下是切换text_view s

的可见性的逻辑
private void toggleVisibility() {
    TextView textView1 = (TextView) findViewById(R.id.text_view_1);
    TextView textViewAbove2 = (TextView) findViewById(R.id.text_view_above_2);
    TextView textViewRight2 = (TextView) findViewById(R.id.text_view_right_2);

    textView1.measure(0, 0);
    textViewAbove2.measure(0, 0);
    textViewRight2.measure(0, 0);

    View parent = findViewById(R.id.parent);
    parent.measure(0, 0);

    if (textView1.getMeasuredWidth() + textViewRight2.getMeasuredWidth() < parent.getMeasuredWidth()) {
        textViewAbove2.setVisibility(View.GONE);
        textViewRight2.setVisibility(View.VISIBLE);
    } else {
        textViewRight2.setVisibility(View.GONE);
        textViewAbove2.setVisibility(View.VISIBLE);
    }
}

是否有更多的解决方案&#34;美丽&#34;比我描述的更短?我想有办法用ConstraintLayout代替RelativeLayout,但我不确定。

编辑1:可能我必须提供我想看到的结果。如果both views are short:

,这是一个活动应该是什么样子

如果views are too long:

,这就是它的样子

3 个答案:

答案 0 :(得分:0)

解决方案:如果你想根据宽度要求设置TextView,那么你只需使用LinearLayout作为宽度为wrap_content的父级,并且对于两个子TextViews也给出宽度'wrap_content'

答案 1 :(得分:0)

尝试使用wrap_content并将这些子文本视图放在父LinearLayout中,将wrap_content作为两个子文本视图的宽度。它将根据这些文本视图中的内容进行放置。

如果您想要水平放置视图 -

 <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    android:layout_width="wrap_content" 
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/text_view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

     <TextView
        android:id="@+id/text_view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

如果您想垂直放置视图 -

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text_view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

     <TextView
        android:id="@+id/text_view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

答案 2 :(得分:-1)

尝试使用percentagelayout。这可能有所帮助。有关详细信息,请提供所需的输出。