Button width und height in dp ändern im GridLayout

mobile-freak

mobile-freak

Dauergast
216
Guten Tag zusammen,

ich bin dabei meine erste App zu programmieren und bin nun an einem Punkt wo ich nicht weiterkomme.

In einem Gridlayout befindet sich bereits ein hauptButton mit height=150dp und width=150dp
Die 150dp habe ich in dimen.xml hinterlegt.
Wenn ich diesen Button anklicke wird ein neuer Button generiert, dem Layout hinzugefügt und auch angezeigt.
Der neue Button hat aber nicht dieselbe Größe wie der Hauptbutton, sondern deutlich kleiner.
Wie kann ich also die Größe des neuen Buttons so ändern das er auch 150dp x150dp hat.

Ich habe bereits folgendes versucht:

hauptButton.setOnClickListener((view) -> {

Button tmpButton = new Button(hauptButton.getContext());

tempButton.setLayoutParams(hauptButton.getLayoutParams());

lyt.addView(tmpButton);
});
 
Hallo Freak,

du kannst entweder einen neuen Button aus dem Quellcode direkt erstellen

b_button = new Button(context);
RelativeLayout.LayoutParams button_layout= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
button_layout.width = wunsch_x;
button_layout.height = wunsch_y;
b_button.setLayoutParams(button_layout);
b_button.setX (xxxx);
b_button.setY (xxxx);


oder dir einen vorhandenen nehmen
ViewGroup.LayoutParams button_layout = hauptButton.getLayoutParams();
button_layout.width = wunsch_x;
button_layout.height = wunsch_y;
hauptButton.setLayoutParams(button_layout);
hauptButton.setX (xxxx);
hauptButton.setY (xxxx);

P.S das habe ich nur eben runtergetippt , NICHT getestet

P.S1 sehe ich eben : ich würde den "Neuen" button , wenn du ihn überhaupt jetzt noch brauchst -
NICHT im Onclick listener erstellen sondern lieber zwei Buttons mit verschiedener Grösse in OnCreate und diese mit setVisible wegblenden , bzw. anzeigen

Ist weit einfacher und du hast nicht das Problem , dass du einen bereits erstellen neuen Button vorher töten musst , damit du wieder einen neuen erstellen kannst .

Das Handling wäre unnötiger Code







lg Stefan
 
Zuletzt bearbeitet:
Hmm, also irgendwie klappt das nicht so.

Der hauptButton soll weiterhin sichtbar bleiben und immer wenn ich drauf klicke soll ein neuer Button dem GridLayout hinzugefügt werden.

Momentan passiert folgendes, siehe Bild im Anhang:


Mit den beiden Codes passierte nichts :S
 

Anhänge

  • IMG_20160815_154600.jpg
    IMG_20160815_154600.jpg
    274,5 KB · Aufrufe: 317
Zuletzt bearbeitet:
was hast du denn jetzt verändert bzw angewendet ?
Ohne Code kann ich dir leider nicht folgen
 
Edit sehe oben
 
Schon klar , wo dein Problem ist , aber ich wollte von dir den Code wissen , den du jetzt nach meinem ersten Post verändert hast .
Ich muss wissen , WANN und WO du was machst

Und vor allem mit welchen variablen , mein Code ist pseudocode, der so nicht bei dir gehen kann
sondern eine erklärung der technik
 
Aso okay, ich habe das in

....onViewCreated{
hauptButton.setOnClickListener((view) -> {

Button tempButton = new Button(hauptButton.getContext());

ViewGroup.LayoutParams button_layout = hauptButton.getLayoutParams();
button_layout.width = 150;
button_layout.height = 150;
hauptButton.setLayoutParams(button_layout);
hauptButton.setX (150);
hauptButton.setY (150);

lyt.addView(tempButton);
});
}

Da ich den tempButton dem Layout hinzufügen möchte, verstehe ich nicht warum wir beim hauptButton was ändern sollen.
 
Hallo Freak,

oben habe ich dir nur gezeigt , wie man Buttons zur Laufzeit eines Programmes erstellen kann und wie man einen vorhandenen
in seinem Aussehen verändern kann ....

Und danach hast du erst einmal gefragt :)

Lass den HauptButton unangetastet , den willst du ja nicht verändern - du magst einen neuen Knopf haben.

Also könntest du beim Click einen neuen erstellen ...
z.b. Mit :

Button b_button = new Button(getApplicationContext());
RelativeLayout.LayoutParams button_layout= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
button_layout.width = wunsch_x;
button_layout.height = wunsch_y;
b_button.setLayoutParams(button_layout);
b_button.setX (xxxx);
b_button.setY (xxxx);

Damit hättest du erst mal einen wunderschönen , nagelneuen Button zur Laufzeit erzeugt
Man sollte nun diesem auch wiederum ein onClickListener zuweisen und bei mehreren Elementen sollte man mit Arrays arbeiten .
Array of Buttons in Android



ABER : An der Stelle mag ich (dringend) einen Reset machen - du verrennst Dich :

Für Dein Vorhaben musst du eine Andere und vor allem die richtige Technik anwenden - Denn so wie du das jetzt tust , wird es nicht funktionieren.
Dir fehlt halt noch eine Menge Grundlage, aber ich erkläre Dir das gerne :

ListView, GridViews usw. verwenden einen ArrayAdapter / BaseAdapter der jeweils für die Einträge ein definiertes Layout (XML) für das
Erscheinungsbild hat und zuständig für das Anzeigen ist.
Die Grösse/Platzierung deiner Knöpfe/Elemente für einen Eintrag wird/kann durch eine gesonderte XML definiert (werden) - Stichwort : Customized.
In nur einigen & erweiterten Fällen greift man da Programmtechnisch zur Laufzeit ein.

a) Man erstellt eine Liste von Datensätzen und weist diese dem Adapter zu.
b) Der Adapter erkennt dann , wieviel Einträge vorhanden sind und verwaltet dir dann deinen Gridview automatisch -
c) Mit dem Klick auf den Hauptbutton fügst du also keinen Button hinzu , sondern einen Datensatz für den Adapter des GridViews.
d) Und den Click auf ein Element ermittelst du mit einem ClickListener auf den GridView

Die XML, die du dann für die jeweiligen GridView-Einträge erstellt hast, zeigt dir den Button an (ich würde allerdings ein ImageView verwenden)


Ein recht einfaches Grund-Beispiel - wichtig, damit man die Technik versteht
Android Grid View

Und hier ein erweitertes Beipiel - so wie du es dann brauchst :
Custom GridView with ImageView and TextView In Android
.
.
Anschließend fügst du dann nur den neuen Datensatz mit dem Click auf den Hauptbutton hinzu und führst
ein refresh auf deinen Gridview aus.



Für Deine Grundlagen empfehle ich dir :

Android Tutorial
Getting Started | Android Developers

Und java allgemein
Rheinwerk Computing :: Java ist auch eine Insel - index



Viel Erfolg

lg
Stefan
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: mobile-freak

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
331
swa00
swa00
MES
Antworten
10
Aufrufe
812
MES
MES
C
Antworten
8
Aufrufe
1.122
swa00
swa00
Zurück
Oben Unten