单击按钮时,如何在其下面添加现有LinearLayout的副本?

时间:2019-04-19 23:44:44

标签: android android-studio kotlin

我想制作一个程序,在该程序上,用户有时必须添加一些学校科目作为输入。我创建了输入字段(请参见下图),在其中单击“添加”按钮时,将在其下方创建一个相等的字段。 “删除”按钮用于删除一个输入字段,但必须至少有一个输入字段。

Later

由于我是Android开发的新手,所以我想知道如何执行此操作。我已经研究了一些网站,但是只能使用addView生成单个元素,例如TextViews:

val relLay = findViewById<RelativeLayout>(R.id.relLay1)
val btnAdd = findViewById<Button>(R.id.btnAdd)
btnAdd.setOnClickListener{
    val tv = TextView(this)
    tv.text = "This is a text view"
    val params : RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT)
    params.setMargins(10, pos, 10, 10)
    pos += 50     // pos is a variable that was declared previously
    rellay.addView(tv)
}

如何在组中生成这些元素?此外,在创建其他类似字段之后,当用户单击“完成”时,如何读取所有创建的字段的数据?

我的input_activity.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/relLay1"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

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

        <RelativeLayout
                android:id="@+id/relLay2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">

            ...

            <!-- Title of the input field -->
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Add subject"
                    android:layout_below="@id/table1"
                    android:layout_marginTop="15dp"
                    android:layout_centerHorizontal="true"
                    android:textSize="36sp"
                    android:id="@+id/txtSubtitle2"/>

            <!-- LinearLayout that I want to be created
            every time the user clickes the button Add -->
            <LinearLayout
                    android:orientation="vertical"
                    android:id="@+id/linLay1"
                    android:layout_below="@id/txtSubtitle2"
                    android:layout_marginTop="15dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                <EditText
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:inputType="textPersonName"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:ems="10"
                        android:id="@+id/edtSubjectNam"
                        android:hint="Subject name"/>
                <TextView
                        android:text="Days of the week"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:textSize="18sp"
                        android:id="@+id/string3"/>
                <CheckBox
                        android:text="Sunday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkSun"/>
                <CheckBox
                        android:text="Monday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkMon"/>
                <CheckBox
                        android:text="Tuesday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkTue"/>
                <CheckBox
                        android:text="Wednesday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkWed"/>
                <CheckBox
                        android:text="Thursday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkThu"/>
                <CheckBox
                        android:text="Friday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkFri"/>
                <CheckBox
                        android:text="Saturday"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:id="@+id/checkSat"/>

                <!-- LinearLayout of the buttons Done, Remove and Add -->
                <LinearLayout
                        android:orientation="horizontal"
                        android:layout_marginLeft="15dp"
                        android:layout_marginStart="15dp"
                        android:layout_marginRight="15dp"
                        android:layout_marginEnd="15dp"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">
                    <Button
                            android:text="Done"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"  
                            android:id="@+id/btnDone"
                            android:layout_weight="1"/>
                    <Button
                            android:text="Add"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" 
                            android:id="@+id/btnAdd"
                            android:layout_weight="1"/>
                    <Button
                            android:text="Remove"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" 
                            android:id="@+id/btnRem"
                            android:layout_weight="1"/>
                </LinearLayout>


            </LinearLayout>
        </RelativeLayout>
    </ScrollView>
</RelativeLayout>

我在Kotlin(InputActivity.kt)中的代码仍然为空,因为我做不到很多。任何帮助都非常非常欢迎。我还希望从“删除”按钮代码的外观中获得一些帮助,但是我最担心的是“添加”按钮。

1 个答案:

答案 0 :(得分:1)

因此,您要做的就是仅使用该视图制作自己的布局文件。 然后,您需要为视图充气并添加到父视图

 public View appendView(Activity activity) {
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.NAME_OF_YOUR_LAYOUT_FILE, null);
    LinearLayout parentLayout = activity.findViewById(R.id.YOUR_CONTAINER);
    parentLayout.addView(view);
}

删除将是相同的,但是要删除视图而不是addView。可能想添加动画以淡出,或将视图设置为animateLayout

要读取数据,只需执行view.findViewById(R.id.FIELD),然后从中获取相关值并保存。可能想为此上课