Android Verhalten beim Hinzufügen neuer Views?

jf

Bekanntes Mitglied
Hallo Andorid'ler,

ich bin schon wieder über einen Stolperstein gestürzt:
wenn ich einen Button einer View hinzufüge und anschließend dessen Breite (getWidth) auslesen, so ist diese 0. - Erst im nächstens Schritt (nach einer Nutzeraktion) kann ich die Breite auslesen.

Mir scheint, dass mit dem Hinzufügen einer View zu einem Container, nicht direkt die Position der View berechnet wird - dies erfolgt wohl erst etwas später.

Gleiches Verhalten zeigt sich, wenn ich den Text einer Schaltfläche und damit auch deren Größe ändere.
=> Wie geht man damit um?

Aktuell füge ich einer ScrollView neue Buttons hinzu und rolle dann ans Ende - leider ist hierbei stets das letzte Element versteckt. Was kann man dagegen tun?
 

jf

Bekanntes Mitglied
Hallo Schlingel, danke für deine Info!

Wenn mich nicht alles täuscht, kannst du da über den DrawableState darauf reagieren.
Die Doku sagt nur folgendes:
"Return an array of resource IDs of the drawable states representing the current state of the view."

Ich würde jetzt vermuten, dass ich die letzte ID aus dem Array ermitteln und mir dann mit
Code:
findViewById()
die aktuelle View holen muss.
Habe ich das so richtig interpretiert?
 

jf

Bekanntes Mitglied
Ähm, nein das hab ich nicht gemeint.
Ok, alles klar.
Der Versuch diesbzgl. muss wohl auch durch die Sichtung einer BAOD (black Activity of death) als gescheitert bezeichnet werden... :D

War schon recht abendteuerlich das Ganze:
Java:
        Activity context = (Activity)parent.context;
        int[] ds = parent.scroller.getDrawableState();
        HorizontalScrollView current = (HorizontalScrollView)context.findViewById(ds[ds.length-1]);
        current.scrollTo(current.getWidth(), 0);

Eher, dass du mit drawableStateChanged oder invalidate deiner ScrollView signalisieren sollst, dass sie das letzte Element zeichnen soll.
Ok, eine drawableStateChanged()-Methode scheint die HorizontalScrollView nicht zu besitzen - aber auch der Aufruf von invalidate() kurz vor der Ermittlung der Größe, bringt leider keine Änderung:
Java:
		parent.scroller.invalidate();
		parent.scroller.scrollTo(parent.scroller.getWidth(), 0);
;(

Mit dem Hinzufügen eines neuen Knopfes zuckt die View nur kurz und signalisiert über einen Alphablend + kurzes Erscheinen eines Rollbalkens, dass es etwas zu rollen gibt. Sobald ein weiterer Knopf hinzugefügt wird, wird der zuvor hinzugefügte Knopf in den Viewport geschoben.

Bei Swing werden UI-Änderungen ja auch in einem separaten Thread abgearbeitet.
Könnte es sein, dass ich für dies Problem auch eine Runnable einsetzen muss?
 
Zuletzt bearbeitet:

schlingel

Gesperrter Benutzer
Nein, das Runnable brauchst du ja, genau wie in Swing das invokeLater, nur wenn du außerhalb des UI-Threads bist. In Swing bist du ja immer außerhalb des EDTs, deswegen der Zwang.
 

jf

Bekanntes Mitglied
Nein, das Runnable brauchst du ja, genau wie in Swing das invokeLater, nur wenn du außerhalb des UI-Threads bist. In Swing bist du ja immer außerhalb des EDTs, deswegen der Zwang.
Ok, dann bin ich jetzt komplett ratlos... :(
Gibt es sonst noch etwas, was ich ausprobieren könnte?
Würde ein kleines Beispiel zum rumspielen helfen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G unterschiedliches Verhalten beim Installieren des App auf dem Smartphone Android & Cross-Platform Mobile Apps 3
R Android Löschfunktion beim Wischen Android & Cross-Platform Mobile Apps 10
W Rand ändern beim ImageView bei Picasso Android & Cross-Platform Mobile Apps 1
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
L App stürtzt ab beim öffnen Android & Cross-Platform Mobile Apps 1
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
M Android Fehler beim Parsen. Android & Cross-Platform Mobile Apps 29
V Android Fehlermeldung beim Öffnen von Eclipse nach Installation der Android Erweiterung Android & Cross-Platform Mobile Apps 4
M Error beim drücken der Zurück-Taste am Handy Android & Cross-Platform Mobile Apps 2
S Fehler beim Textdatei einlesen!? Android & Cross-Platform Mobile Apps 7
A Fehlermeldung beim ändern der ViewGroup. Android & Cross-Platform Mobile Apps 6
H Buttons färben sich mit, beim Hintergrund ändern Android & Cross-Platform Mobile Apps 3
A Mehrere Fehler beim Compilieren Android & Cross-Platform Mobile Apps 4
G Problem beim Rendern von 3D-Objekt Android & Cross-Platform Mobile Apps 0
L Android OutOfMemory beim erneuten Starten der App Android & Cross-Platform Mobile Apps 2
N Android Retain Dialog verschwindet beim drehen Android & Cross-Platform Mobile Apps 4
B Android GameLoopThread stürzt beim 2ten start der App ab? Android & Cross-Platform Mobile Apps 4
K Nullpointer beim Löschen von Datenbankeintrag, je nachdem wo der Befehl steht Android & Cross-Platform Mobile Apps 5
S Java ME Exception beim Abspielen von Musik Android & Cross-Platform Mobile Apps 6
G Fehler beim Import "Invalid project description" Android & Cross-Platform Mobile Apps 2
K Android schwarzer Bildschirm beim Rendern von Text und Dreiecken Android & Cross-Platform Mobile Apps 9
DaniSahne96 Problem beim Appdebuggen auf Smartphone Android & Cross-Platform Mobile Apps 3
P Android Problem beim Widget - Denkfehler ? Android & Cross-Platform Mobile Apps 2
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
S Android Fehler beim Anzeigen meines Apps auf Galaxy Tab Android & Cross-Platform Mobile Apps 4
G Beziehung von THIS beim Imageadapter und AsyncTask Android & Cross-Platform Mobile Apps 7
V [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben Android & Cross-Platform Mobile Apps 2
R Ein Problem beim ausführen von folgendem Quelltext Android & Cross-Platform Mobile Apps 11
N Error in HTTP operation beim KXML parsen Android & Cross-Platform Mobile Apps 7
A Problem beim Subtrahieren eines Double von einem Double Android & Cross-Platform Mobile Apps 5
G fehldermeldung beim klicken auf "build" Android & Cross-Platform Mobile Apps 8
L SecurityException beim lesen/schreiben eine Datei Android & Cross-Platform Mobile Apps 7
F Problem beim Erstellen der Jar File Android & Cross-Platform Mobile Apps 4
S createPlayer beim Entwickeln Android & Cross-Platform Mobile Apps 6
D Samsung Tastatur Shortcut hinzufügen Android & Cross-Platform Mobile Apps 4
W Android Wieso kann ich keine ListView mehr zum Layout hinzufügen? Android & Cross-Platform Mobile Apps 1
ruutaiokwu Android Wo das 'android.useAndroidX' property hinzufügen? Android & Cross-Platform Mobile Apps 8
B Android SQLite Tabelle neue Spalten hinzufügen Android & Cross-Platform Mobile Apps 8
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3
V Buttons bei Klick hinzufügen Android & Cross-Platform Mobile Apps 2
V Buttons zur Actionbar hinzufügen Android & Cross-Platform Mobile Apps 4
M Android View zu View hinzufügen Android & Cross-Platform Mobile Apps 4
E Android View zur Laufzeit hinzufügen Android & Cross-Platform Mobile Apps 4

Ähnliche Java Themen

Neue Themen


Oben