使用textview创建动态线性布局

时间:2017-03-24 19:45:44

标签: android android-layout android-linearlayout

我在Android中很新。

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

例如,我创建了这个(在这种情况下,让我们说ArrayLists每个都有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?
    }

我希望将它显示为: alistA [0] - &gt; TV1 alistB [0] - &gt; TV2 等等...

alistA [[1]] - &gt; Tv1(新创建) alistB [[1]] - &gt; 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>

EditText和按钮需要保持在同一个位置。

谢谢。

3 个答案:

答案 0 :(得分:1)

听起来像是Android的ListView的一个很好的用例。来自Google's documentation

  

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

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

main.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帖子:Custom Adapter for List View

答案 1 :(得分:0)

执行以下操作。在检索/创建数据后,在运行时获取数据并填充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);
    }
}

答案 2 :(得分:0)

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

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

加载架构后,您会找到要将linearLayouts插入的视图,如下所示:

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

然后将linearlayout添加到这样的视图中:

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

然后将textview添加到LinearLayout,如下所示:

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