以编程方式创建结合Textview和EditText的自定义字段

时间:2019-04-16 11:01:52

标签: android android-edittext textview advanced-custom-fields programmatically-created

我正在根据API的JSON响应接收的字符串制作动态表格。

在这里我想创建一个动态表单,在其中标识 {field_name} 并将其替换为EditText。

下面给出的字符串是从API响应接收的字符串,是的,它包含“ {}” 作为字符串的一部分。

因此,我在 while循环的帮助下找到了它们,并在每次找到{}时创建了EditText。

现在我无法解决的问题是如何用String / TextView追加那些EditText。

例如,

String demo = "{event_name} Event on{event_date} at {event_time} venue {event_venue} All are welcome. -";

Pattern p = Pattern.compile("\\{([^}]*)\\}");
Matcher m = p.matcher(str);

EditText et;

while (m.find()) {
   LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, 
   LinearLayout.LayoutParams.WRAP_CONTENT);
   lp.setMargins(10, 10, 10, 10);
   et = new EditText(this);
   Log.e("onCreateInternal: ", "=" + i);

   SmsTypeGroup.addView(et, lp)
}

用字符串中的EditText替换 {} 后,所需的输出如下。

Required output is as shown in this Image

任何帮助都很好。

谢谢。

注意:唯一的条件是整个过程必须通过Java文件以编程方式完成,而不使用XML。

1 个答案:

答案 0 :(得分:1)

我收集英语不是您的母语,但是如果我理解正确,那么您现在所得到的只是一个带有4个editText的视图,您需要一种方法来另外添加textview,其中text包含在{}元素之间字符串。

一种方法是使用split而不是patternmatch:

String demo = "{event_name} Event on{event_date} at {event_time} venue {event_venue} All are welcome. -";
String[] parts = demo.split("}");

EditText et;

for(String part : parts){
   LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, LinearLayout.LayoutParams.WRAP_CONTENT);
   lp.setMargins(10, 10, 10, 10);
   et = new EditText(this);

   SmsTypeGroup.addView(et, lp);

   String[] _parts = part.split("{");
   if(_parts.length >1){
     TextView tv = new TextView(this);
     tv.text = _parts.[0];
     SmsTypeGroup.addView(tv, lp)
   }
}