【问题标题】:I want to add dynamic layout with text view and edit text on button click for N level我想添加带有文本视图的动态布局并在 N 级按钮单击时编辑文本
【发布时间】:2018-05-10 08:42:03
【问题描述】:

当点击添加电话文本时,我想动态添加视图(在下方查看添加电话:“移动”是 textview,右侧是编辑文本)

这需要为 N 级..当用户点击添加电话视图时将被添加..

如何做到这一点?

【问题讨论】:

  • 我尝试添加动态视图,但没有像在图像中显示那样获得视图,而且我只能添加一个视图..并且在获取动态添加的编辑文本的 ID 时遇到问题
  • lol @KulsDroid 想说到目前为止你尝试过什么代码?
  • this的可能重复
  • 由此:LinearLayout ll = (LinearLayout)findViewById(R.id.l_phone); // 添加编辑文本 EditText et = new EditText(this); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); et.setLayoutParams(p); et.setText("文本"); et.setTextColor(getResources().getColor(R.color.black)); et.setId(numberOfLines + 1); ll.addView(et); numberOfLines++;我添加了edittext,但我无法实现类似于我上传的图像的设计

标签: android user-interface android-edittext textview


【解决方案1】:

试试这个代码。这可能会对你有所帮助。

<?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 类中单击按钮只需使用以下方法。并确保声明一个 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 中显示了该值,您可以使用 String 数组来存储所有动态创建的 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 和扩展该子 xml 的视图来得到这个......无论如何,谢谢你......只是一个问题我现在正面临如何获得动态创建的编辑文本的价值?
  • 我们可以知道我们动态创建的布局层次结构。在那里我们只需要检查视图是否有 EditText 的实例。
  • 我们知道 EditText 是线性布局的第二个孩子,这就是为什么我使用索引 1 来获取 EditText 的视图(即 getChildAt(1))。这可能会对您有所帮助。
  • 谢谢..我得到了 edittext 的值,但 UI 与图像不正确..当我添加动态视图时..它被添加到我的“添加电话”文本上方,水平灰线是也失踪了..你能帮忙吗?非常感谢您的帮助..谢谢
  • 好的,我会帮你解决那条缺失的水平灰线。
【解决方案2】:

使用代码将 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>

现在让你的活动布局为:

  <?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);

【讨论】:

    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2013-04-10
    • 2012-11-09
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多