创建带有文本视图的动态线性布局



我在Android中很新。

我在以编程方式创建动态线性布局时遇到了一些问题。实际上,我在 ArrayList 中有一些需要显示的信息。问题是我不知道 ArrayList 中有多少个项目,所以我需要为 ArrayList 中的每个项目创建相同的布局 (LinearLayoutChild(。

例如,我创建了这个(在这种情况下,假设 ArrayList 每个有 2 个项目(

 ArrayList<String> alistA = new ArrayList<String>();
    ArrayList<String> alistB = new ArrayList<String>();
    ArrayList<String> alistC = new ArrayList<String>();
    ArrayList<String> alistD = new ArrayList<String>();
    ArrayList<String> alistE = new ArrayList<String>();
    alistA.add(0, "TextA1");
    alistA.add(1, "TextA2");
    alistB.add(0, "TextB1");
    alistB.add(1, "TextB2");
    alistC.add(0, "TextC1");
    alistC.add(1, "TextC2");
    alistD.add(0, "TextD1");
    alistD.add(1, "TextD2");
    alistE.add(0, "TextE1");
    alistE.add(1, "TextE2");
    int NumberArray = 2;
    for(int i = 0; i<NumberArray;i++){
        // How can i do this?
    }

我想像这样显示它:阿利斯特A[0] -> 电视1alistB[0] -> Tv2等等...

alistA[[1]] -> Tv1 (新创建(alistB[[1]] -> Tv2 (新创建(...

我的XML文件 :

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.murat.testlol.MainActivity"
android:id="@+id/LinearLayout1"
android:orientation="vertical">

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/Et1"/>
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/Btn1"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="12"
    android:orientation="horizontal"
    android:id="@+id/LinearLayoutChild">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:orientation="vertical"
        android:id="@+id/Ll1">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Tv1"
            android:gravity="center"
            android:text="TextView1"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView2"
            android:id="@+id/Tv2"
            android:gravity="center"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:orientation="vertical"
        android:id="@+id/Ll2">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Tv3"
            android:gravity="center"
            android:text="TextView3"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/Tv4"
            android:text="TextView4"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:orientation="vertical"
        android:id="@+id/Ll3">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/Tv5"
            android:gravity="center"
            android:text="TextView5"/>
    </LinearLayout>

</LinearLayout>

编辑文本和按钮需要保留在同一位置。

谢谢。

听起来像是Android的ListView的一个很好的用例。来自谷歌的文档:

列表视图

是显示可滚动项目列表的视图组。列表项使用适配器自动插入到列表中,该适配器从源(如数组或数据库查询(中提取内容,并将每个项目结果转换为放置在列表中的视图。

要走这条路,请更新main.xml以包含ListView元素 - 并将LinearLayoutChild移动到其自己的XML文件中。

主.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.murat.testlol.MainActivity"
    android:id="@+id/LinearLayout1"
    android:orientation="vertical">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Et1"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Btn1"/>
    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/list"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

generic_linear_layout_child.xml:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="4"
    android:orientation="vertical"
    android:id="@+id/linear_layout_child">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Tv1"
        android:gravity="center"
        android:text="TextView1"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView2"
        android:id="@+id/Tv2"
        android:gravity="center"/>
</LinearLayout>

然后,创建一个适配器,将数组中的数据绑定到相应的 UI 元素。下面是有关如何创建自定义适配器的 SO 帖子:列表视图的自定义适配器

您需要使用如下例程动态创建线性布局和文本视图:

public  TextView makeTextView (String text)
{
    TextView tv = new TextView (context)
    tv.setText (text) ;
    // customise the layout of the text here, eg...
    tv.setTextColor(Color.RED) ;
    return tv;
}
public  LinearLayout makeHorizLayout ()
{
    LinearLayout ll = new LinearLayout (context);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    ll.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    return ll;
}

加载架构后,您将找到要在其中插入线性布局的视图,如下所示:

View mainView = findViewById (R.id.LinearLayout1);

然后,将线性布局添加到如下所示的视图中:

LinearLayout ll = makeHorizlayout ();
mainView.add(ll);

然后,您将文本视图添加到 LinearLayout,如下所示:

TextView tv = makeTextView ("whatever text");
ll.addView (tv);

执行以下操作。获取数据并在检索/创建数据后在运行时填充 linearLayout 容器。下面是创建视图的示例。

private LinearLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    container = new LinearLayout(this);
    container.setOrientation(LinearLayout.VERTICAL)
    // + other layout stuff / better inflate this from xml
    // Get data and call createLayout with the data
}
createLayout(List<List<String>> lists) {
    for (List<String> list : lists) {
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        // + other layout stuff / better inflate this from xml
        for (String string : list) {
            TextView textView = new AppCompatTextView(this);
            textView.setText(string);
            linearLayout.addView(textView);
        }
        container.addView(linearLayout);
    }
}

最新更新