3 Stimmen

Wie man automatisch die Größe eines EditText-Widgets (mit einigen Attributen) in einem TableLayout ändert

Ich habe ein Problem mit dem Layout. Was ich tue, ist dies:

  1. TableLayout in xml mit null Kindern erstellen:
    <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. Erste Zeile programmatisch in onCreate() einfügen:
    TableLayout tLayoutContents = (TableLayout)findViewById(R.id.t_layout_contents); NoteElement nr_1 = new NoteElement(this); tLayoutContents.addView(nr_1);

Klasse "NoteElement" extends TableRow. Die 1. Zeile besteht nur aus einem leeren ImageView als Platzhalter und einem EditText zur Texteingabe. Der Konstruktor von NoteElement sieht wie folgt aus:

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());
}

Die Methode addTextField() legt die Attribute für das EditText-Widget fest:

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;
}

So weit, so gut. Aber mein Problem tritt auf, sobald der verfügbare Platz für die Zeichen ausgeschöpft ist. Der EditText ändert seine Größe nicht, sondern schaltet auf einen einzeiligen EditText um. Ich suche verzweifelt nach einer Möglichkeit, wie sich der EditText in seiner Höhe dynamisch anpassen kann, abhängig von der eingefügten Textlänge.

Hat jemand einen Tipp dazu?

1voto

stfn Punkte 1140

Okay, ich hab's. Dies scheint ein Problem zu sein mit TableLayout im Allgemeinen. Ich habe das Layout neu implementiert mit einem einfachen LinearLayout . I dient dem Zweck gleichermaßen und die EditText richtig angezeigt wird. Ich sehe eigentlich keinen Grund, eine TableLayout und im Moment kann ich mir keine Situation vorstellen, in der man es wirklich brauchen würde, d.h. eine LinearLayout unzureichend wäre.
Ich empfehle daher die Verwendung anderer Layouts wie LinearLayout o RelativeLayout wann immer möglich. Aber beachten Sie, dass dies nur meine zwei Cent sind...

1voto

stfn Punkte 1140

Ich habe gerade einen weiteren Blick auf TableLayout geworfen (für einen ganz anderen Zweck) und bin dabei auf Folgendes gestoßen setColumnShrinkable(int columnIndex, boolean isShrinkable) was mir bei meinem früheren Problem hätte helfen sollen.

Einzelheiten finden Sie in der Dokumentation:
https://developer.Android.com/reference/Android/widget/TableLayout.html#setColumnShrinkable%28int,%20boolean%29
Bitte beachten Sie, dass ich dies nicht getestet habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X