如何使用for循环以编程方式创建LinearLayout

时间:2018-08-21 11:52:51

标签: android android-layout android-linearlayout

我正在尝试通过LinearLayout中包含的信息以编程方式创建Array

让我解释一下:

我创建了不在PlayStore上的专业应用程序。

我有以下手动填充的数组(一种全局变量):

    static final String[][] reseaux = new String[][] {

            {"Net1","192.168.0.1"},
            {"Net2","192.168.10.1"},
            {"Net3","192.168.20.1"},
            {"Net4","192.168.30.1"}
    };

对于某些客户,它仅包含一个条目:

    static final String[][] reseaux = new String[][] {

        {"Net1","192.168.0.1"}
    };

根据Array仅包含一个条目,我创建了以下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/welcome"
android:layout_gravity="center"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:ignore="Overdraw">


<include
    android:id="@+id/tool_bar"
    layout="@layout/tool_bar" />

<ScrollView
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_marginTop="15dp"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:baselineAligned="false">

            <LinearLayout
                android:id="@+id/linearLayoutTest"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</ScrollView>
</LinearLayout>

和代码:

        LinearLayout l = findViewById(R.id.linearLayoutTest);
    for (int i = 0; i < reseaux.length; ++i) {

        final int id = i;
        ImageButton resBtn = new ImageButton(this);
        TextView tv = new TextView(this);
        tv.setGravity(Gravity.CENTER | Gravity.BOTTOM);
        tv.setText(reseaux[i][0]);

        resBtn.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.button_reseaux));
        resBtn.setBackgroundColor(getResources().getColor(R.color.transparent));
        l.addView(resBtn);
        l.addView(tv);

        resBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Check network
                if (CheckNetworkStatus.isNetworkAvailable(getApplicationContext())) {
                    Intent i = new Intent(getApplicationContext(),
                            HomeReseauActivity.class);
                    startActivity(i);
                    BASE_URL = null;
                    nomReseau = null;
                    BASE_URL = reseaux[id][1];
                    nomReseau = reseaux[id][0];
                } else {
                    //Error message if no network connexion
                    if (toastMessage != null) toastMessage.cancel();
                    toastMessage = Toast.makeText(HomeActivity.this, getString(R.string.networkError), Toast.LENGTH_LONG);
                    toastMessage.show();
                }

            }
        });

给我以下非常适合我的结果:

enter image description here

现在,当我在Array中有多个条目时,这就是我得到的:

enter image description here

这不适合我。我会喜欢三个图标的水平线。填充一行后,它将创建一个由三个图标等组成的新行。

以下是绘画的快速编辑,以演示我想要的内容:

enter image description here

我认为解决方案必须很简单..但是我无法得到这个结果。

沉迷于我的代码,我自己学习所有东西,并且肯定有一种更好的编写方法:-)

希望有人可以帮助我!

1 个答案:

答案 0 :(得分:0)

正如我的问题评论中所述,解决方案是使用RecyclerView和GridLayoutManager。

对于将来的读者来说,这个 link 对我有很大帮助!

感谢所有回答我问题的人。