如何使水平线性布局子包装其内容?

时间:2017-11-09 14:13:42

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

正如标题所示,在我的情况下,子视图是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>

最后我想要一个接一个地垂直(每行一个) 水平尺寸作为文字长度(内容)

Linear Layout是否可以实现这一点?

由于

修改: 由于@Ajil O的答案正在发挥作用,我自己的问题仍然存在。我隔离了主要区别。

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

膨胀代码:

    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);

文字视图answer_tag

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

style 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的回答一样。膨胀过程中的一些事情弄乱了它。

5 个答案:

答案 0 :(得分:1)

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一样宽,否则视图(或其内容)将被剪裁。

<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>

答案 1 :(得分:1)

最后找到了一个解决方案,结果表明Android一旦显示就不会刷新wrap_content的视图布局。

如答案WRAP_CONTENT not working after dynamically adding views

中所示

所以我的问题是膨胀视图然后添加内容(文本)。

为此,我再次设置高度和宽度:

    tag.setLayoutParams(new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));

现在,如果所有来自Ajil O的答案都已实施,那么它正在运作!

希望这个边缘案件将来会对某人有用

答案 2 :(得分:0)

只需在wrap_content中使用android:layout_width参数即可,您现在正在使用0dp

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/tagsVerticalLineup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">

<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>

答案 3 :(得分:0)

最好使用ContrainstLayout,并且可以将任何事件操作到您想要的尺寸

答案 4 :(得分:0)

试试这个

  • 制作父级布局&#39; df = pd.read_csv("Trimmed Training Data.csv", delimiter=",") X = np.array(df.drop(['PredictThis'],1)) y = np.array(df['PredictThis']) X = preprocessing.scale(X) # create NN model model = Sequential() # 2 inputs, 10 neurons in 1 hidden layer, with tanh activation and dropout model.add(Dropout(0.2, input_shape=(15,))) model.add(Dense(100, init='uniform', input_shape=(15,), activation='relu')) model.add(Dropout(0.2)) model.add(Dense(100, init='uniform', input_shape=(100,), activation='relu')) model.add(Dropout(0.2)) model.add(Dense(5, init='uniform', input_shape=(100,), activation='relu')) model.add(Dropout(0.2)) model.add(Dense(1, init='uniform', activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='rmsprop') # Fit the model model.fit(X, y, nb_epoch=25, batch_size=15)
  • Height and Width=match_parent制作宽度textView,以便您可以使用match_parent或使用textalignment=centre
gravity=centre