动态TextView包装到线性布局中的下一行/行

时间:2012-02-28 19:38:28

标签: android android-layout alignment android-linearlayout textview

我正在尝试构建一个UI,其中我有一个已在XML中定义的线性布局。

根据用户的输入,我需要在此线性布局中添加一些TextView。我能做到这一点。

我的实际问题是,当我有更多文字视图时,它们彼此相邻堆叠,一些文本视图文本被隐藏或垂直拉伸,如下图所示。

please see this image (Current)

我想使用线性布局的整个宽度,如果文本视图不适合这一行,它应该放在新行或第一个文本视图下面..我希望显示为如下。

I wish, I can do this way

以下是我在XML中的线性布局配置:

    <RelativeLayout
        android:id="@+id/RL1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:paddingBottom="5dip"
        android:paddingTop="5dip" >

        <TextView
            android:id="@+id/text1"
            android:layout_width="85dip"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="left"
            android:text="Lable 1"
            android:textColor="#999999" />

        <LinearLayout
            android:id="@+id/LL1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/button1"
            android:layout_toRightOf="@+id/text1"
            android:gravity="left|center_vertical"
            android:orientation="horizontal"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:paddingTop="3dip" >
        </LinearLayout>

        <Button
            android:id="@+id/button1"
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginTop="2dip"
            android:background="@drawable/plus"
            android:clickable="true"
            android:focusable="true"
            android:paddingTop="5dip" />
    </RelativeLayout>

任何人都可以帮助我如何在java代码中重新调整它。

3 个答案:

答案 0 :(得分:1)

我想建议你如何在线性布局中为所有视图提供相同的大小,你可以通过在XML文件中使用权重属性来实现,即android:该特定视图的权重以及何时使用您应该给出width = 0dp或0dip的属性。我认为这样可以轻松解决您的问题。

我建议您首先在以下链接中充分了解如何使用此属性: - Weight property with an example

答案 1 :(得分:1)

请参阅:

How to wrap Image buttons in a horizontal linear layout?

How can I do something like a FlowLayout in Android?

您也可以搜索github FlowLayout.java

另一种方法是: Android - multi-line linear layout

此外,还有一个将图像添加到TextView中的类:  https://stackoverflow.com/a/21250752/755804 这与在一般情况下包装视图不同,但有时可以完成工作。

答案 2 :(得分:0)

我是韩国人。 所以我的英语说得不好,但是我会帮你的。

首先,使用四个文本框创建“ item.xml”。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">


<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/set_checkbox"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text2"
    android:text="0"
    android:layout_weight="1"
    android:gravity="center"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text3"
    android:text="0"
    android:layout_weight="4"
    android:gravity="center"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text4"
    android:text="0"
    android:layout_weight="4"
    android:gravity="center"/>
</LinearLayout>

第二步,创建“ main.xml”,其中将动态生成“ item.xml”。 “方向”有助于一次创建一行。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>

最后,您可以使用以下代码在每行中创建四个TextView。

        LinearLayout layout = (LinearLayout)findViewById(R.id.mainxml); 
        LinearLayout item = (LinearLayout)layout.inflate(this.getContext(), R.layout.itemxml, null);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
        item.setLayoutParams(params);


        CheckBox cb = item.findViewById(R.id.set_checkbox);
        TextView text2 = item.findViewById(R.id.text2);
        TextView text3 = item.findViewById(R.id.text3);
        TextView text4 = item.findViewById(R.id.text4);

        cb.setChecked(true);
        text2.setText("text2");
        text3.setText("text3");
        text4.setText("text3");

        layout.addView(item);

第10个循环如下图所示。 enter image description here