Создайте пользовательские поля, программно комбинируя Textview и EditText - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над созданием динамической формы из строк, полученных из JSON Response API.

Здесь я хочу создать динамическую форму, в которой я хочу идентифицировать {field_name} и заменить ее на EditText.

Строка, приведенная ниже, является строкой, полученной из ответа API, и да, она содержит "{}" как часть строки.

Так что я нахожу для них с помощью цикла while и создаю EditText для каждого, когда {} найден.

Теперь проблема, которую я не могу решить, состоит в том, как добавить эти EditText с помощью String / TextView.

Например,

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 из строки желаемый вывод будет таким, как показано ниже.

Требуемый выходной сигнал показан на этом рисунке

Любая помощь будет великолепна.

Заранее спасибо.

Примечание. Единственное условие - весь процесс должен выполняться программно из файла Java, без использования XML.

1 Ответ

1 голос
/ 16 апреля 2019

Я понимаю, что английский не ваш родной язык, но если я правильно понимаю, то, что вы получаете сейчас, это просто представление с 4 editText, и вам нужен способ дополнительного добавления текстовых представлений с текстом между элементами {} встрока.

Один из способов сделать это - использовать 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)
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...