Как автоматически изменить размер виджета EditText (с некоторыми атрибутами) в TableLayout - PullRequest
3 голосов
/ 28 апреля 2010

У меня проблема с макетом. Что я делаю, это:

  1. создать TableLayout в xml с нулевыми дочерними элементами:
    <TableLayout android:id="@+id/t_layout_contents" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/l_layout_tags" android:stretchColumns="1" android:paddingLeft="5dip" android:paddingRight="5dip" />
  2. Вставить первую строку программно в onCreate ():
    TableLayout tLayoutContents = (TableLayout)findViewById(R.id.t_layout_contents);<br> NoteElement nr_1 = new NoteElement(this);<br> tLayoutContents.addView(nr_1);

Класс «NoteElement» расширяет TableRow. 1-я строка состоит из пустого ImageView в качестве заполнителя и EditText для ввода текста. Конструктор NoteElement выглядит так:

public NoteElement(Context c) {  
    super(c);  
    this.context = c;  
    defaultText = c.getResources().getString(R.string.create_note_help_text);  

    imageView = new ImageView(context);
    imageView.setImageResource(android.R.color.transparent);

    LayoutParams params = new LayoutParams(0);
    imageView.setLayoutParams(params);

    addView(imageView);
    addView(addTextField());
}

Метод addTextField () определяет атрибуты для виджета EditText:

private EditText addTextField() {  
    editText = new EditText(context);  
    editText.setImeOptions(EditorInfo.IME_ACTION_DONE);  
    editText.setMinLines(4);  
    editText.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
    editText.setHint(R.string.create_note_et_blank_text);
    editText.setAutoLinkMask(Linkify.ALL);
    editText.setPadding(5, 0, 0, 0);
    editText.setGravity(Gravity.TOP);
    editText.setVerticalScrollBarEnabled(true);

    LayoutParams params = new LayoutParams(1);
    editText.setLayoutParams(params);

    return editText;
}

Пока все хорошо. Но моя проблема возникает, как только доступное место для символов заканчивается. EditText не изменяет свой размер, а переключается на одну строку EditText. Я отчаянно ищу способ, которым EditText динамически изменяет свою высоту в зависимости от длины вставленного текста.

Кто-нибудь намекает на это?

Ответы [ 2 ]

1 голос
/ 17 мая 2010

Я просто еще раз взглянул на TableLayout (для совершенно другой цели) и наткнулся на setColumnShrinkable(int columnIndex, boolean isShrinkable), который должен был помочь мне в моей прежней проблеме.

Подробности см. В документации:
https://developer.android.com/reference/android/widget/TableLayout.html#setColumnShrinkable%28int,%20boolean%29
Обратите внимание, что я не проверял это.

1 голос
/ 07 мая 2010

Хорошо, я понял. Кажется, это проблема TableLayout в целом. Я переопределил макет простым LinearLayout. Я выполняю эту функцию одинаково, и EditText отображается правильно. На самом деле я не вижу причины использовать TableLayout, и сейчас я не могу вспомнить ситуацию, в которой он действительно понадобится, то есть LinearLayout будет недостаточно.
Поэтому я рекомендую использовать другие макеты, такие как LinearLayout или RelativeLayout, когда это возможно. Но учтите, что это всего лишь два моих цента ...

...