Dynamische (Image)Buttons, Größe bestimmen

kuzdu

Aktives Mitglied
Hallo Leute,

ich wühle mich jetzt schon einige Zeit durchs Internet und finde auf mein Problem keine Lösung. Und zwar soll meine App schön aussehen, weshalb ich Grafiken habe. Auf einer Seite werden zahlreiche Buttons ausgelesen und dementsprechend nicht im .xml-Layout erstellt sondern dynamisch im Code. Diese Buttons sollen eine bestimmte Größe haben, aber genau da liegt das Problem, ich bekomme sie einfach nicht skaliert.

Mein Code sieht wie folgt aus:

Java:
       Button[] b_test  = new Button[100];
       b_test[1] = new Button(this);
       b_test[1].setId(1);
      
        b_test[1].setBackgroundDrawable(getResources().getDrawable(R.drawable.menubutton));
        b_test[1].setText("Button eins");

//wird einfach ignoriert
        b_test[1].setMaxWidth(buttonsize);
        b_test[1].setMaxHeight(buttonsize);
        b_test[1].setHeight(buttonsize);
        b_test[1].setWidth(buttonsize);


//Irgendwo gelesen, dass man setScaleX/Y benutzen soll, das wirft allerdings ein NoSuchMethode-Exception 
//        b_test[1].setScaleX(10);
//        b_test[1].setScaleY(10);

     
        //Positionierung des Buttons
        lpTest[1] = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        lpTest[1].addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        rLayout.addView(b_test[1], lpTest[1]);

Ohne das Hintergrundbild ist es überhaupt kein Problem, die Größe zu verstellen.
Ich habe es auch schon mit einem ImageButton versucht, aber der hat mir setWidth/setHeight nicht einmal angeboten.

Morgen schaue ich mal wie das ganze mit ImageView aussieht, aber ich kann mir eigentlich nicht vorstellen, dass das der richtige Weg ist oder? Ich meine, warum sollte ich - falls überhaupt möglich - das Ganze per ImageView realisieren, wenn es (Images)Buttons gibt?

Ich finde zwar zahlreiche Themen im Internet dazu, aber meistens haben die Ersteller xml-Code. Hatte jemand vielleicht von euch schon das Problem? Ich wäre um jeden Rat sehr dankbar...

Gudde Nacht :)
 

dzim

Top Contributor
Ich mache eigentlich auch nichts mehr direkt per Code. Und wenn, dann lege ich mir kleinere Layouts an, die ich per Inflater lade. Ich versuche eigentlich immer, alles per XML zu erledigen.

Ich verstehe das Problem tatsächlich noch nicht ganz, habe bei mir aber auch herunterskalierte ImageViews für einen aktuellen kleineren Auftrag. Dort mache ich es so:
[XML]
<ImageView
android:id="@+id/fragment_info_smiley"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center_vertical"
android:contentDescription="@string/fragment_info_smileyContentDescr"
android:scaleType="fitCenter"
android:src="@drawable/empty" />
[/XML]

Ich habe jetzt hier schon die Grösse quas fix vorgegeben. Das ist für mich ok, weil ich gezielt für ein Gerät entwickle, du aber müsstest hier vermutlich (im Code) an den LayoutParams noch schrauben. Wichtig ist noch das Attribut scaleType, sonst wird dein Bild vielleicht noch abgeschnitten oder so.
 

kuzdu

Aktives Mitglied
Hey,

danke für die schnelle Antwort. Ich bin leider noch nicht dazu gekommen, aber werde mal nach Inflater googlen. Ich werde mal versuchen deinen XML-Code per Java zu erstellen.

Um das Problem noch mal genauer zu beschreiben:
Die Situation ist, dass ich x Kategorien habe und jede Kategorie wird über einen Button angesprochen. Das x wird stetig mit der Zeit wachsen, da die App mit Kategorien inhaltlich immer erweitert wird. Deshalb fragt die App bei jedem Start eine Onlinedatenbank an, ob Kategorien dazugekommen sind. Wenn ja, werden diese auf dem Handy in eine SQLite-Datenbank geschrieben.
Aus dieser Datenbank werden dann x Buttons erzeugt.

Beim XML-Layout müsste ich immer einen Button per Hand einfügen und zusätzlich müsste der Benutzer jedes Mal seine App updaten.
Das ist der Grund, warum ich den Code per Java deklariere und nicht per XML. Ansonsten bevorzuge ich auch das XML.

Ich hoffe, das Problem ist klarer geworden? :)

---
Allgemein gefragt (habe danach jetzt noch nicht gegoogelt): Wie realisiert/organisiert man das Layout, dass es auf allen Geräten möglichst gleich aussieht. Vielleicht hat jmd. ja schon im Vorfeld einen guten Tipp.

Ich versuche jetzt mal das ganze per ImageView zu realisieren.

Gruß
 

dzim

Top Contributor
Der schnellste Weg zum LayoutInflater ist LayoutInflater.from(<context>).

Was deine Buttons angeht... Warum verwendest du dann nicht eine Liste? Das wäre weitaus sinnvoller in dem Scenario, denn du könntest dann einfach einen SimpleCursorAdapter ("Cursor", wie bei den SQLite Operationen üblich...) erweitern und damit die Liste befüllen lassen. Nur so als Idee.
 

kuzdu

Aktives Mitglied
Hey,
für Leute, die hier vielleicht noch drüber stolpern:

Ich habe es mit Hilfe dieses Videos gelöst: https://www.youtube.com/watch?v=4MFzuP1F-xQ

Und dem Befehl:

Java:
Button btn = new Button(this);
btn.getLayoutParams().height = 120; //Hier beliebige Höhe eintragen

Allgemein gilt zu sagen, dass ich mich nicht für ImageButton und ImageView entschieden habe, da ich es nicht hinbekommen habe diese zusätzlich auch noch zu beschriften. Beim Button konnte ich ein Background sowie setText() benutzen.

Ich frage mich jetzt noch, wie ich die Buttons so anpassen kann, dass sie auf auf jedem Androidgerät die entsprechend gleiche Größe haben und nicht kleiner/größer wirken, nur weil das Display/die Auflösung anders ist als bei meinem Testgerät. Aber an sich ist der Thread gelöst. :) Danke an alle!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Android Wie erstelle ich eine dynamische Tabelle (TableLayout)? Android & Cross-Platform Mobile Apps 2
M Android Dynamische SchriftGröße einer TextView Android & Cross-Platform Mobile Apps 3
? dynamische Inhalte Android & Cross-Platform Mobile Apps 3
D Android dynamische Buttons positionieren Android & Cross-Platform Mobile Apps 1
S Dynamische EditText View eingaben in Datenbank speichern Android & Cross-Platform Mobile Apps 0
G Dynamische View Inhalt -> Lagesensor Android & Cross-Platform Mobile Apps 3
S Image dynamisch anhand von id in ImageView anpassen Android & Cross-Platform Mobile Apps 4
B Android ListView set custom check Image and delete Android & Cross-Platform Mobile Apps 0
D Grid Lists Image Gallery Android & Cross-Platform Mobile Apps 32
N Save Image to DB and set ImageView Android & Cross-Platform Mobile Apps 1
M 20 Image Button für jede Auflösung positionieren Android & Cross-Platform Mobile Apps 3
D Java ME Image strecken und in beliebiger Gradzahl drehen Android & Cross-Platform Mobile Apps 3
J image j2me Android & Cross-Platform Mobile Apps 2
S Image Problem Android & Cross-Platform Mobile Apps 11
M ein image pixel für pixel aufbauen : setPixel() ? Android & Cross-Platform Mobile Apps 1
J Image reinladen funktioniert nicht. Android & Cross-Platform Mobile Apps 13
S onClickListener auf Buttons die im Code erzeugt wurden setzen. Android & Cross-Platform Mobile Apps 8
L Hintergrund eines Switch(Buttons) ändern Android & Cross-Platform Mobile Apps 3
N Android Zwei Buttons gleichzeitig drücken Android & Cross-Platform Mobile Apps 9
H Buttons färben sich mit, beim Hintergrund ändern Android & Cross-Platform Mobile Apps 3
D Hilfe! es geht um Buttons und Sounds Android & Cross-Platform Mobile Apps 14
V Buttons bei Klick hinzufügen Android & Cross-Platform Mobile Apps 2
V Buttons zur Actionbar hinzufügen Android & Cross-Platform Mobile Apps 4
L Android Bildschirm bleibt dunkel nach neustarten der App nach betätigen des Home-Buttons Android & Cross-Platform Mobile Apps 3
D Android Viele Buttons und ein Layout Android & Cross-Platform Mobile Apps 6
K Verständisfrage bzgl. Buttons und ihnen eine Funktion geben. Android & Cross-Platform Mobile Apps 3
P Buttons im + anordnen Android & Cross-Platform Mobile Apps 2
T Android AlertDialog; Buttons ändern Android & Cross-Platform Mobile Apps 4
H Buttons werden falsch angeordent Android & Cross-Platform Mobile Apps 2
F Buttons und awt? Android & Cross-Platform Mobile Apps 7

Ähnliche Java Themen

Neue Themen


Oben