Breite von Textfeld mit einer SeekBar ändern.

  • Guten Abend!



    Ich möchte aufgrund von Benutzerfreundlichkeit die Möglichkeit bieten, die Breite eines EditText-Feldes mit Hilfe einer SeekBar verändern zu können.
    Bis jetzt habe ich folgenden Code:



    Ich habe die textfeldbreite auch schon ausgeben lassen: sie ändert sich richtig und wird ständig aktualisiert. Allerdings aktualisiert sich die Breite des EditText-Feldes nicht, außer ich ändere den Text. In diesem Fall wird die Breite aktualisiert.


    Warum wird die Breite nicht ständig aktualisiert?


    Mit freundlichen Grüßen
    Heringsalat100

  • Hi,


    ich denke hier liegt das Problem:


    Java
    meinEditText.invalidate();




    Soweit ich weiß, kann nur der Haupt-Thread ein invalidate aufrufen. Somit kannst du das in deinem onSeekBarChangeListener nicht machen.


    Eine mögliche Lösung könnte irgendwie so aussehen, dass du einen Handler erstellst, der das textfeld invalidatetd. Du musst dann nur noch den Handler informieren


    Frei aus dem Kopf in etwa:


    Und dann in deinem OnSeekBarChangeListener():


    Java
    handler.sendEmptyMessage(1234);



    1234 am besten natürlich durch eine definierte Konstante ersetzen, bzw. wenn der Handler auch zukünftig garnichts anderes machen soll, kannst du die Abfrage natürlich ganz weglassen.




    Gruß



    Edit: Paar mal editiert, beim nächsten mal denk ich erst nach, bevor ich auf Absenden drücke ;)

  • Hallo,


    erstmal danke für die Antwort!


    Ich habe es mit dem Handler gerade ausprobiert, allerdings ergibt sich das gleiche Problem.
    Allerdings ist mir noch aufgefallen, dass sich das Textfeld auch immer dann anpasst, wenn eine Tastatur aufgerufen wird (egal durch welches Fenster im Programm).


    Gibt es vielleicht noch einen Fehler, der diese Wirkung hervorruft?


    MfG
    Heringsalat100

  • Hmmm,


    versuch mal anstatt


    Java
    meinEditText.getLayoutParams().width = textfeldbreite;



    eher folgendes:


    Java
    LayoutParams params = meinEditText.getLayoutParams();
    params.width = textfeldbreite;
    meinEditText.setLayoutParams(params);


    Ich könnte darauf wetten, dass die Funktion setLayoutParams(..) sich um alles nötige kümmert. Möglicherweise ist das invalidate() dann überhaupt nicht mehr nötig.

  • Hallo,


    vielen Dank! Es funktioniert!
    Man muss allerdings, sofern man ein RelativeLayout benutzt, nicht LayoutParams, sondern MarginLayoutParams nutzen (siehe http://developer.android.com/r…eLayout.LayoutParams.html bei "Inherited methods").


    Hier zur Vollständigkeit der Code, den ich für mein RelativeLayout nutze:


    Java
    MarginLayoutParams params = (MarginLayoutParams) meinEditText.getLayoutParams();
    params.width = textfeldbreite;
    meinEditText.setLayoutParams(params);


    Viele Grüße
    Heringsalat100

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!