我想添加带有文本视图的动态布局,并在单击 N 级按钮时编辑文本
I want to add dynamic layout with text view and edit text on button click for N level
当点击添加 phone 文本时我想动态添加视图(下面的视图添加 phone:其中 'mobile' 是 textview
右侧有编辑文本)
这需要用于 N 级别。当用户单击添加时,将添加 phone 视图。
如何做到这一点?
试试这个 code.This 可能对你有帮助。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_Click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Click" />
<LinearLayout
android:id="@+id/linearView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
在您的 Activity class 按钮上单击只需使用下面的 method.And 确保声明一个 int 变量(索引),这将帮助您将新视图添加到末尾。
int index=0;
linearView = (LinearLayout) findViewById(R.id.linearView);
@OnClick(R.id.btn_Click)
public void click() {
LinearLayout mainLinearLayout = new LinearLayout(this);
mainLinearLayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams mainParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
mainLinearLayout.setLayoutParams(mainParams);
mainLinearLayout.setGravity(Gravity.CENTER);
LinearLayout firstChildLinearLayout = new LinearLayout(this);
firstChildLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams firstChildParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
firstChildLinearLayout.setLayoutParams(firstChildParams);
TextView textView = new TextView(this);
LinearLayout.LayoutParams txtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
txtParams.setMarginStart(5);
txtParams.setMarginEnd(10);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setLayoutParams(txtParams);
textView.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_foreground), null, null, null);
textView.setText("mobile >");
EditText editText = new EditText(this);
LinearLayout.LayoutParams etParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
etParams.weight = 1;
editText.setBackground(null);
editText.setLayoutParams(etParams);
firstChildLinearLayout.addView(textView, 0);
firstChildLinearLayout.addView(editText, 1);
LinearLayout secondChildLinearLayout = new LinearLayout(this);
secondChildLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
secondChildLinearLayout.setBackgroundColor(getResources().getColor(R.color.color_grey));
LinearLayout.LayoutParams secondChildParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1);
secondChildLinearLayout.setLayoutParams(secondChildParams);
mainLinearLayout.addView(firstChildLinearLayout, 0);
mainLinearLayout.addView(secondChildLinearLayout, 1);
linearView.addView(mainLinearLayout, index);
index++;
}
因此,要从 EditText 中获取值,请使用以下代码。我已经在 Toast 中显示了值,您可以使用一个字符串数组来存储所有动态创建的 EditText 值。
public void getAllEditTextValues(View view) {
View v = null;
for (int i = 0; i < linearView.getChildCount(); i++) {
v = linearView.getChildAt(i);
if (v instanceof LinearLayout) {
View tempView = ((LinearLayout) v).getChildAt(0);
View et = ((LinearLayout) tempView).getChildAt(1);
String etValue = null;
if (et instanceof EditText) {
etValue = ((EditText) et).getText().toString();
}
Toast.makeText(this, "" + etValue, Toast.LENGTH_SHORT).show();
// Use Array to Store all values of EditText
}
}
}
将 XML 创建为 "custom_row.xml" 使用代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="0dp"
android:layout_weight="0.1"
android:id="@+id/crossImage"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content"
android:src="@drawable/cross_image"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.45"
android:id="@+id/columnSpinner"
android:text="demo"
android:layout_gravity="center"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.45"
android:id="@+id/contentValueEditText"/>
</LinearLayout>
现在让你 activity 布局为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<Button
android:id="@+id/btn_Click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Click" />
</LinearLayout>
现在代码如下:
int index=0;
linearView = (LinearLayout) findViewById(R.id.linearView);
@OnClick(R.id.btn_Click)
public void click() {
final LinearLayout singleInsertView1 = (LinearLayout) LayoutInflater.from(QueryRunner.this).inflate(R.layout.insert_single_item, null);
EditText editText = (EditText)singleInsertView1.findViewById(R.id.contentValueEditText);
editText.setTag("EditText"+index);
singleInsertView1.setTag("LinearLayout"+index);
contentViewAdder.addView(singleInsertView1);
index++;
}
现在您可以通过以下代码访问编辑文本:
LinearLayout singleLayout = (LinearLayout)linearView.findViewWithTag("LinearLayout"+index);
EditText editText = singleLayout.findViewWithTag("EditText"+index);
当点击添加 phone 文本时我想动态添加视图(下面的视图添加 phone:其中 'mobile' 是 textview
右侧有编辑文本)
这需要用于 N 级别。当用户单击添加时,将添加 phone 视图。
如何做到这一点?
试试这个 code.This 可能对你有帮助。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn_Click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Click" />
<LinearLayout
android:id="@+id/linearView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
在您的 Activity class 按钮上单击只需使用下面的 method.And 确保声明一个 int 变量(索引),这将帮助您将新视图添加到末尾。
int index=0;
linearView = (LinearLayout) findViewById(R.id.linearView);
@OnClick(R.id.btn_Click)
public void click() {
LinearLayout mainLinearLayout = new LinearLayout(this);
mainLinearLayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams mainParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
mainLinearLayout.setLayoutParams(mainParams);
mainLinearLayout.setGravity(Gravity.CENTER);
LinearLayout firstChildLinearLayout = new LinearLayout(this);
firstChildLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams firstChildParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
firstChildLinearLayout.setLayoutParams(firstChildParams);
TextView textView = new TextView(this);
LinearLayout.LayoutParams txtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
txtParams.setMarginStart(5);
txtParams.setMarginEnd(10);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setLayoutParams(txtParams);
textView.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_foreground), null, null, null);
textView.setText("mobile >");
EditText editText = new EditText(this);
LinearLayout.LayoutParams etParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
etParams.weight = 1;
editText.setBackground(null);
editText.setLayoutParams(etParams);
firstChildLinearLayout.addView(textView, 0);
firstChildLinearLayout.addView(editText, 1);
LinearLayout secondChildLinearLayout = new LinearLayout(this);
secondChildLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
secondChildLinearLayout.setBackgroundColor(getResources().getColor(R.color.color_grey));
LinearLayout.LayoutParams secondChildParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1);
secondChildLinearLayout.setLayoutParams(secondChildParams);
mainLinearLayout.addView(firstChildLinearLayout, 0);
mainLinearLayout.addView(secondChildLinearLayout, 1);
linearView.addView(mainLinearLayout, index);
index++;
}
因此,要从 EditText 中获取值,请使用以下代码。我已经在 Toast 中显示了值,您可以使用一个字符串数组来存储所有动态创建的 EditText 值。
public void getAllEditTextValues(View view) {
View v = null;
for (int i = 0; i < linearView.getChildCount(); i++) {
v = linearView.getChildAt(i);
if (v instanceof LinearLayout) {
View tempView = ((LinearLayout) v).getChildAt(0);
View et = ((LinearLayout) tempView).getChildAt(1);
String etValue = null;
if (et instanceof EditText) {
etValue = ((EditText) et).getText().toString();
}
Toast.makeText(this, "" + etValue, Toast.LENGTH_SHORT).show();
// Use Array to Store all values of EditText
}
}
}
将 XML 创建为 "custom_row.xml" 使用代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="0dp"
android:layout_weight="0.1"
android:id="@+id/crossImage"
android:layout_gravity="center_vertical"
android:layout_height="wrap_content"
android:src="@drawable/cross_image"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.45"
android:id="@+id/columnSpinner"
android:text="demo"
android:layout_gravity="center"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.45"
android:id="@+id/contentValueEditText"/>
</LinearLayout>
现在让你 activity 布局为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linearView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<Button
android:id="@+id/btn_Click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Click" />
</LinearLayout>
现在代码如下:
int index=0;
linearView = (LinearLayout) findViewById(R.id.linearView);
@OnClick(R.id.btn_Click)
public void click() {
final LinearLayout singleInsertView1 = (LinearLayout) LayoutInflater.from(QueryRunner.this).inflate(R.layout.insert_single_item, null);
EditText editText = (EditText)singleInsertView1.findViewById(R.id.contentValueEditText);
editText.setTag("EditText"+index);
singleInsertView1.setTag("LinearLayout"+index);
contentViewAdder.addView(singleInsertView1);
index++;
}
现在您可以通过以下代码访问编辑文本:
LinearLayout singleLayout = (LinearLayout)linearView.findViewWithTag("LinearLayout"+index);
EditText editText = singleLayout.findViewWithTag("EditText"+index);