2013-03-22 7 views
5

Ich füge eine Schaltfläche programmatisch in meine vorhandene Android-Ansicht ein, wenn der Benutzer auf eine andere Schaltfläche klickt. Es funktioniert in Bezug auf Funktionalität, aber einige der Stilinformationen scheinen ignoriert zu werden.Android - Eine Ansicht programmatisch hinzufügen ignoriert einige Stilattribute

Ich füge die Schaltfläche hinzu, indem ich ein separates Layout habe, das nur die Schaltfläche enthält, wobei der Stilwert vorausgefüllt ist.

<Button xmlns:android="http://schemas.android.com/apk/res/android" style="@style/FileStorageDeleteButton"></Button>

von getLayoutInflater verwenden, bin ich dann in der Lage diese Schaltfläche, um das Layout hinzuzufügen.

buttonDelete = (Button) getLayoutInflater().inflate(R.layout.pete_button_filedelete, null);

LinearLayout layout = (LinearLayout)findViewById(R.id.layoutFileStorage);

layout.addView(buttonDelete, 1);

Ich habe eine XML-Datei in dem Werte-Verzeichnis, das die Farbe setzt, Text usw. für @style/FileStorageDeleteButton, von denen die meisten von der Taste verwendet werden, wenn es hinzugefügt werden . Aber aus irgendeinem Grund werden die vier Randattribute und layout_below ignoriert.

Ich erhalte keine Fehler im LogCat, wenn diese Schaltfläche erscheint, als ob das Styling einfach nicht angewendet wird. Wenn ich die Schaltfläche manuell in das XML für dieses Layout einfüge, werden alle Stile erfolgreich verwendet.

Jede Hilfe sehr geschätzt.

Antwort

3

Sie müssen die Layoutparameter übergeben, wenn Sie addView() aufrufen, da Layoutparameter für eine einzelne Ansicht nicht relevant sind. Sie werden immer im Zusammenhang mit der Umgebungssicht genommen. Es gibt Varianten von addView(), die ein LayoutParams Argument nehmen.

EDIT hinzufügen mehr Details

Sie sollten eine Reihe von LinearLayout.LayoutParams erstellen und Ihre Margen dort gesetzt, dann ist das passieren zu addView()

layout_below für eine LinearLayout ignoriert sowieso (das Attribut ist nur relevant, Wenn du addView(buttonDelete, 1) anrufst, sagst du, wo du die Ansicht in das lineare Layout schreiben sollst

+0

Danke David - dein Beitrag hat mich in die richtige Richtung geschickt, um zu finden, dass ich p ass mehr Variablen in aufblasen. Nun benutze 'buttonDelete = (Button) getLayoutInFlater(). Infllate (R.layout.pete_button_filedelete, layout, false);', obwohl 'layout_below' immer noch ignoriert wird. Ich kann das umgehen, aber ich frage mich nur, warum das immer noch nicht funktioniert? Danke noch einmal! Wenn ich einen guten Ruf hätte, würde ich :) –

+0

'layout_below' wird nur für' RelativeLayout' verwendet. Ihr 'LinearLayout' ignoriert dieses Attribut. In einem LinearLayout können Sie über/unter steuern, indem Sie die Position der Ansicht innerhalb des Layouts verwenden. –