如果currentLine中没有空间,则将TextView移至nextLine

时间:2016-08-31 03:23:15

标签: android android-layout android-linearlayout

我有一个在其中有10个文本视图的linearLayout,但问题是我用数据库的值填充它们,因此大小正在动态变化。

我希望如果要显示的下一个视图不适合在linearlayout中跳过一条线并放在其他视图下方。

这是我的xml代码:

<LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="alfabetico"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="botellas"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="barato"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="botana"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="caro"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="entradas"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="especialidades"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="postres"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="refrescos"
            android:padding="3dp"
            android:layout_margin="3dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:textSize="12dp"
            android:background="#666"
            android:text="shots"
            android:padding="3dp"
            android:layout_margin="3dp"/>

    </LinearLayout>

2 个答案:

答案 0 :(得分:0)

我建议您创建一个适配器,将数据扩展为文本视图,这样,数据大小永远不会产生问题,应用程序会动态生成TextView。

这是一个例子

将LinearLayout更改为ListView

<ListView
    android:id="@+id/listView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</ListView>

将TextView放在另一个xml文件中

<强> row.xml

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#fff"
    android:textSize="12dp"
    android:background="#666"
    android:text=""
    android:padding="3dp"
    android:layout_margin="3dp"/>

创建适配器

class dataListAdapter extends BaseAdapter {
        private List<String> items;

        dataListAdapter(List<String> items) {
            this.items = items;
        }

        public int getCount() {
            return items.size();
        }

        public String getItem(int arg0) {
            return items.get(arg0);
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = getLayoutInflater();
            View row;
            row = inflater.inflate(R.layout.row, parent, false);
            TextView title = (TextView) row.findViewById(R.id.title);
            title.setText(getItem(position));

            return (row);
        }
    }
}

在您的活动中将ListView对象绑定到xml中的ListView并设置适配器

您的活动类

ListView listView = (ListView) findViewById(R.id.listView);
dataListAdapter adapter = new dataListAdapter(/*fetch your data from data base and pass it to this constructor*/);
listView.setAdapter(adapter);

因为我不知道你的数据结构在数据库中,在这个例子中我假设数据只是String(我假设你需要在TextView中显示一些数据)。如果需要,你可以修改它。

答案 1 :(得分:0)

我不知道这是否有效,但这就是我所做的。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TableRow
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tableRow"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:weightSum="5">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="especialidades"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="postres"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="refrescos"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="shots"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="entradas"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />
</TableRow>

<TableRow
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tableRow"
    android:weightSum="5">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="alfabetico"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="botellas"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="barato"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="botana"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="12dp"
        android:background="#666"
        android:text="caro"
        android:padding="3dp"
        android:layout_margin="3dp"
        android:layout_weight="1"
        android:gravity="center" />

</TableRow>

我将textviews放在tablerows中。每个tablerow有5个textview,权重为5.每个textview的重心为中心,权重为1.

我想你最初可以做的是动态创建一个tablerow并在其中添加你的textview然后在任何布局上添加它(相对于线性)。获取五个数据后,创建另一个tablerow并重复该过程。我想如果你只有10个新的文本视图,那么使用它比知道文本视图是否已经靠近屏幕的一侧要容易得多。