我想制作一个程序,在该程序上,用户有时必须添加一些学校科目作为输入。我创建了输入字段(请参见下图),在其中单击“添加”按钮时,将在其下方创建一个相等的字段。 “删除”按钮用于删除一个输入字段,但必须至少有一个输入字段。
由于我是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
)中的代码仍然为空,因为我做不到很多。任何帮助都非常非常欢迎。我还希望从“删除”按钮代码的外观中获得一些帮助,但是我最担心的是“添加”按钮。
答案 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),然后从中获取相关值并保存。可能想为此上课