android - 如何让水平 Linear Layout Child 包裹其内容?

标签 android android-layout android-linearlayout android-xml

<分区>

如标题所示,在我的例子中, subview 是一个包含一些内容的 TextView。我希望它是每行一个

因此,将 layout_width 设置为 0dp 并将 layout_weight 添加到 1 是行不通的,我假设这是因为它其行中唯一的一个,所以 1 是最高权重...虽然不确定

这是 xml:

    <LinearLayout
        android:id="@+id/tagsVerticalLineup"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        android:gravity="center_horizontal">

        <TextView 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
         />

        <TextView 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
         />

        <TextView 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
         />

    </LinearLayout>

最后我希望它们一个接一个垂直排列(每行一个) 以水平大小作为文本长度(内容)

这甚至可以用线性布局吗?

谢谢

编辑: 由于@Ajil O 回答有效,我自己的问题仍然存在。我隔离了主要区别。

在我的项目中,我使用 Inflate 从代码中添加了 Text View,因为我有默认样式。

膨胀代码:

    final LinearLayout tagAreaView = (LinearLayout) findViewById(R.id.tagsVerticalLineup);
    TextView tag = (TextView) getLayoutInflater().inflate(R.layout.answer_tag, null);

    int tagId = someListArray.size();
    tag.setId(tagId);
    tag.setText(someChangingObject.text);
    tagAreaView.addView(tag, tagId);

TextView answer_tag:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/SelectedTagAnswer" />

样式 xml SelectedTagAnswer:

<style name="SelectedTagAnswer">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_marginStart">8dp</item>
    <item name="android:layout_marginEnd">16dp</item>
    <item name="android:background">@drawable/selected_answer</item>
    <item name="android:drawablePadding">8dp</item>
    <item name="android:gravity">center_horizontal</item>
    <item name="android:drawableStart">@drawable/ic_cross_round</item>
    <item name="android:elevation">3dp</item>
    <item name="android:paddingBottom">8dp</item>
    <item name="android:paddingEnd">25dp</item>
    <item name="android:paddingStart">15dp</item>
    <item name="android:paddingTop">8dp</item>
</style>

注意:

当插入一个简单的 Text View 到使用相同样式的 xml 时, 它像@Ajil O 的回答一样工作。膨胀过程中的某些东西搞砸了。

最佳答案

LinearLayout宽度设置为match_parent,将高度设置为wrap_content

<LinearLayout
    android:id="@+id/tagsVerticalLineup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal">

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     />

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     />

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     />

</LinearLayout>

如果您希望 TextView 占据 1 行,请使用 android:maxLines="1" 属性

编辑

enter image description here

TextView 现在都是彩色的。您可以看到 TextView 与其内容一样宽。

容器 LinearLayout 以淡紫色(?)着色。此 LinearLayout 必须至少最长 TextView 一样宽,否则 View (或其内容)将获得剪裁。

<LinearLayout
    android:id="@+id/tagsVerticalLineup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:background="#AAAAFF"
    android:layout_gravity="center">

    <TextView
        android:layout_margin="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#080"
        android:text="small text"
        android:textColor="#FFF"
        android:textSize="18sp"
        android:maxLines="1"/>

    <TextView
        android:layout_margin="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Slightly longer text"
        android:background="#400"
        android:textColor="#FFF"
        android:textSize="18sp"
        android:maxLines="1"/>

    <TextView
        android:layout_margin="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="loooooooooooooooooong text"
        android:background="#008"
        android:textColor="#FFF"
        android:textSize="18sp"
        android:maxLines="1"/>

</LinearLayout>

关于android - 如何让水平 Linear Layout Child 包裹其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204032/

相关文章:

android - Asset文件夹是只读的吗?

android - 编辑安卓可执行文件

android - 注销 fragment 时 OTTO 中的 IllegalArgumentException

android - ListView 未在选项卡 View 中完整查看

android - 我如何设置膨胀的 View 宽度,它的父 View 宽度的一半?

android - layout_weight 不适用于 Drawerlayout 内的 LinearLayout

java - DiffUtil.Callback 中 getChangePayload(int oldItemPosition, int newItemPosition) 的用法是什么

安卓自定义: swipe toggle button with image

android - `Content_main.xml` 有什么意义?

android - ConstraintLayout 中带有drawableEnd 的 TextView 换行问题