Button größe ändern

  • Antworten:34
Aron Brast
  • Forum-Beiträge: 92

01.09.2014, 18:50:19 via Website

Hallo,
ich habe ein kleines Problem, ich möchte die größe eines Buttons. mithilfe des Programmcodes ändern, dafür berechne ich die neuen Werte der Höhe und der Breite, jedoch funktioniert es nur, wenn ich konkrete Zahlen angeben und nicht wenn ich die Variable angebe :(
Hier ein Stück des Codes:

So funktioniert es nicht:
Button b2 = (Button) findViewById(R.id.button2);
b2.setWidth(buttonWidth);
b2.setHeight(buttonHeight);

So funktioniert es:
Button b2 = (Button) findViewById(R.id.button2);
b2.setWidth(400);
b2.setHeight(700);

Irgendwelche Vorschläge ???

Antworten
Aron Brast
  • Forum-Beiträge: 92

01.09.2014, 19:06:32 via Website

Als int,
So: int buttonWidth = screenWidth / 100 * 50;
:)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.09.2014, 19:07:25 via App

@Ludy
Wenns nen String wäre würde es nen Fehler geben da man keinen übergeben kann. Aber es tut ja einfach nicht wenn ichs richtig verstanden habe

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

01.09.2014, 19:08:58 via Website

Ja genau @Pascal P. es wird kein Fehler gemeldet, nur die größen werden nicht gesetzt :(

Antworten
Gelöschter Account
  • Forum-Beiträge: 15

01.09.2014, 19:15:46 via Website

Gib deine Werte am besten mal ins Logcat aus um sie mit deinen Erwartungen zu vergleichen. Wenn ich mich recht erinnere war das so:

android.util.Log.i("DEINTAG", "Width: " + buttonWidth);

In Eclipse kann man Logcat über Window > Show View öffnen.

Antworten
Aron Brast
  • Forum-Beiträge: 92

01.09.2014, 19:19:07 via Website

Beim Tag Deintrag wird der Text Width: 0 ausgegeben, kann es sein, dass die Höhe des Relative Layouts oder sonstiges gar nicht richtig erfasst werden ??

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

01.09.2014, 20:22:55 via App

Pascal P.

@Ludy
Wenns nen String wäre würde es nen Fehler geben da man keinen übergeben kann. Aber es tut ja einfach nicht wenn ichs richtig verstanden habe

Hatte nicht richtig gelesen sorry.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Georg C.
  • Forum-Beiträge: 235

01.09.2014, 22:33:00 via Website

@Ludy
... immer mit der ruhe.

@Aron Brast
und was ist > screenWidth < ?

Gruß
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.09.2014, 22:40:16 via Website

Aron Brast

Als int,
So: int buttonWidth = screenWidth / 100 * 50;
:)

  1. Warum rechtest du das so?
  2. Einfacher: screenWidth /2 ist das gleiche...

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

02.09.2014, 12:13:58 via Website

@Georg screenWidth ist die Width des Relative Layouts

@Pascal ja ich weiß, dass deine Methode einfacher ist, aber da ich für sehr viele Dinge die Größen ausrechne und diese alle in % fand ich es so einheitlicher :)

danke schonmal für eure Hilfe :)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

02.09.2014, 13:43:45 via App

Noch einfacher und übersichtlicher:

deinWert * 0.5 ; das wären 50 Prozent

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Aron Brast
  • Forum-Beiträge: 92

02.09.2014, 17:01:08 via Website

Okay, aber hat noch irgendjemand eine Idee zum ursprünglichen Problem ????

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.09.2014, 17:16:57 via Website

Kann eigentlich garnicht sein.
Der Theorie nach muss es mit Variablenübergabe und mit übergebe einer Integer als Parameter funktionieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

02.09.2014, 17:37:37 via Website

Kann es denn sein, dass die Größe gar nicht richtig genommen wird, das mache ich so:

RelativeLayout r = (RelativeLayout) FindViewById(R.id.RelativeLayout1);
screenWidth = r.getWidth();
screenHeight = r.getHeight();

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.09.2014, 17:46:01 via Website

Was ist denn der inhalt der Variablen? (Debugmodus)
Ich weiss jetzt nicht ob das stimmt, aber dich bin der Meinug, dass diese getWidth Methoden des layouts schon veraltet (deprecated) sind und deswegen nicht funktionieren?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Aron Brast
  • Forum-Beiträge: 92

02.09.2014, 17:59:08 via Website

0 ist der Inhalt :(
Weißt du denn, wie man es anders machen könnte ?
Ist wenn man die größe des gesamten Displays nimmt die Bar oben, in der Wlan... angezeigt wird auch mit inbezogen ?

Antworten
Robert Obkircher
  • Forum-Beiträge: 74

02.09.2014, 18:28:04 via App

public void button(View v) {
RelativeLayout r = (RelativeLayout) findViewById(R.id.mainRelativeLayout);
Button b = (Button) findViewById(R.id.button);
int w = (int) (r.getWidth() * 0.50);
int h = (int) (r.getHeight() * 0.50);
b.setWidth(w);
b.setHeight(h);
}

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
android:id="@+id/mainRelativeLayout">

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    android:onClick="button"/>

</RelativeLayout>

Das funktioniert bei mir

Antworten
Georg C.
  • Forum-Beiträge: 235

02.09.2014, 19:11:09 via Website

Hallo,
weil die Lösung eben gepostet wurde, lasse weiteres bei Seite.

@Georg screenWidth ist die Width des Relative Layouts

Hätte screenWidth ein Integer gewesen!, -> würde alles funktionieren!
Deshalb habe gefragt ...

NUR (als Info):

RelativeLayout r -> r ist eine Instanz der RelativeLayout Klasse
und ist vom Typ! - RelativeLayout.
Die Klasse selber; - besitzt keine getWidth() ... getHeight() Methoden.
Die getWidth() ... getHeight() Methoden überladen (aus der vererbungshierarchie) die Methoden der android.view.View Klase. Weil die Methoden einen Intereger als Rückgabenwert liefern, ist das Cast (to Integer Umwandlung) zwingen notwendig.

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Aron Brast
  • Forum-Beiträge: 92

02.09.2014, 21:01:48 via Website

@Robert, wie rufst du die Methode button(View v) auf und, wann, kann sein, dass ich was falsch gemacht habe, aber bei mir funktioniert es einfach nicht :(

Antworten
Robert Obkircher
  • Forum-Beiträge: 74

02.09.2014, 21:08:51 via App

In der xml löst "android:onClick="button"" die Methode button(View v) aus. Wenn du die Methode nur in einer anderen Methode verwendest, brauchst du das "View v" nicht.

— geändert am 02.09.2014, 21:14:30

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.09.2014, 21:38:45 via Website

Mit einem onCklick Listener sollte es aber auch gehen wenn du es nicht in der XML machen willst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Stefan W
  • Forum-Beiträge: 424

03.09.2014, 21:17:15 via App

Ich geh mal davon aus, dass die Breite des RelativeLayouts die Bildschirmbreite ist.

In dem Fall bekommst du die Bildschirmbreite auch folgendermaßen :

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point(); display.getSize(size);
int width = size.x;

— geändert am 03.09.2014, 21:18:45

Antworten
Georg C.
  • Forum-Beiträge: 235

03.09.2014, 22:55:53 via Website

Der einer;
spekuliert. der anderer geh davon aus, ...
...
und meine "Kristallkugel" sagt mir:
... <- (dass lasse ich lieber)
...
LEUTE!
Der will seinen(e) Button(s) in der der 50% -> screenWidth /2 Proportion -> Relation visualisieren. Was ist daran so schwer? (!)
...
Über Display ist sorry - Falsche weg!
Die frage; - um das Problem zu lösen lautet:
auf was wird das Button gezeichnet?

Abstrakt:
Integer (int) was_w = auf was wird das Button gezeichnet.getWidth()
Integer (int) was_h = auf was wird das Button gezeichnet. getHeight()

weiterhin:
... (Aron Brast code)
b2.setWidth(was_w);
b2.setHeight(was_h);

... kopf schütteln

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.09.2014, 23:06:04 via App

Dege dich nicht über jeden Code auf.
Hilf ihm lieber auf die Sprünge.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Stefan W
  • Forum-Beiträge: 424

04.09.2014, 02:35:57 via Website

Georg C.

Der einer;
spekuliert. der anderer geh davon aus, ...
...
und meine "Kristallkugel" sagt mir:
... <- (dass lasse ich lieber)
...
LEUTE!
Der will seinen(e) Button(s) in der der 50% -> screenWidth /2 Proportion -> Relation visualisieren. Was ist daran so schwer? (!)
...
Über Display ist sorry - Falsche weg!
Die frage; - um das Problem zu lösen lautet:
auf was wird das Button gezeichnet?

Abstrakt:
Integer (int) was_w = auf was wird das Button gezeichnet.getWidth()
Integer (int) was_h = auf was wird das Button gezeichnet. getHeight()

weiterhin:
... (Aron Brast code)
b2.setWidth(was_w);
b2.setHeight(was_h);

... kopf schütteln

LG
Georg

Ich hab zwar nur die Hälfte verstanden, aber wenn man schon sowas schreibt, sollte da ein bisschen mehr Konstruktives darin vorkommen.
Ich geh jetzt nicht weiter darauf ein, sonst muss ich mich nur unnötig aufregen.

Unter "screenWidth" verstehe ich die Bildschirmbreite.

In dem Fall funktioniert das so (wenn das übergeordnete Layout vom Button ein RelativeLayout ist und man die Hälfte der Bildschirmbreite haben möchte) :

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams();
params.width = size.x/2;
button.setLayoutParams(params);

— geändert am 04.09.2014, 09:03:02

Antworten
Georg C.
  • Forum-Beiträge: 235

04.09.2014, 18:29:11 via Website

Hallo,
lassen wir uns nicht aufregen - schickt, dass ich es mache :)
Ärgerlich - klar! - ist Fakt, dass wir hier spekulieren, behaupten usw.
Wenn Robert Obkircher seiner Vorschlag nicht funktioniert, erbt seine Main -> und schon wieder: Vermutung! vom Fragment oder FragmentActivity, oder ?
ALSO:

1) Aron - poste uns bitte hier dein Code.

... Hilf ihm lieber auf die Sprünge.

Das habe ich (mit der "Abstrakte Formel" ) versucht!
Ich weis nicht wie ich es genauer erklären soll?
Der Platziert seine Buttons in einem VIEW. (Container) z.B.: Frame
Weil ich nicht weis wo die Buttons (auf was die gezeichnet werden) war mein Fehler
Entschuldigung soll lieber (obwohl ist auch nix) wo die Platziert werden ... ich nenne es ButtonView. Also kleine Korrektur:

Abstrakt: (immer noch, weil kein "grunz, grunz" weis wo seiner Buttons platziert / gezeichnet / .... sind.)
int my_w = ButtonView.getWidth()
int my_h = ButtonView.getHeight()

weiterhin:
... (Aron Brast code)
b2.setWidth(my_w);
b2.setHeight(my_h);

... ABER ... goto Punkt 1)

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Daniel
  • Forum-Beiträge: 8

07.09.2014, 14:00:24 via App

also beim HTC und der viper-ein kann ich das alles einstellen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.09.2014, 14:01:46 via App

@Daniel: ????

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

07.09.2014, 16:39:01 via App

Daniel Gerbeth

also beim HTC und der viper-ein kann ich das alles einstellen.

Ich glaube du meinst die viper-rom.
Dieses Thema bezieht sich aber auf die Entwicklung einer App.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Jan-René A.
  • Forum-Beiträge: 4

08.09.2014, 13:38:07 via App

Immer schön auf default lassen.

Ich kenne mich mit Android Programmierung nicht aus, aber mir ist in den Codeschnipseln aufgefallen, dass /2 oder *0,5 verwendet wird. Die Buttons.witdh etc. sind immer Integer.

Außerdem habe ich Zweifel daran, ob es sinnvoll ist, die Buttons dynamisch zu verändern. Das kann theoretisch dazu führen, dass das Programm bei unüblichen, aber erlaubten Bildschirmgrößen unbedienbar wird. Usability ist das (zugegebenermaßen zu oft) benutzte Stichwort.

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

09.09.2014, 19:30:07 via App

Mal zurück zum ursprünglichen Problem. Und das liegt wohl nicht darin dass sich die Button-Größe nicht andern lässt. Das funktioniert ja mit direkter Wertübergabe, und bestimmt auch per Variablen-Übergabe, wenn in der Variablen der richtige Wert steht. Das tut er aber nicht.

Also funktioniert die Art wie die Größe des umliegenden Layouts ermittelt wird nicht. Hier würde ich tippen liegt der Fehler darin dass die Layout-Größe ausgelesen wird während die APP gerade startet, im onCreate(). Zu diesem Zeitpunkt sind die Layouts noch nicht gerendert, und haben eine Dimension von 0.

Die Lösung zum Problem besteht darin die Button-Größe nicht per Programmcode zu ändern, sondern ein Layout zu entwerfen bei dem der Button richtig gerendert wird.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2014, 19:32:21 via Website

@Tobias: hatte ich auch schon vermutet und irgendwo gelesen.
Es muss kein anderes Layout sein, sonern die Buttonberechnung muss einfach zu einem späteren Zeitpunkt durchgeführt werden.
Z.b. in der onStart().

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Jan-René A.
  • Forum-Beiträge: 4

10.09.2014, 00:02:32 via App

Tobias Eckert

Mal zurück zum ursprünglichen Problem. Und das liegt wohl nicht darin dass sich...

Ich war beim Problem!
Und das Problem was ich jetzt habe, dass du meinen Einwand einfach weggeworfen hast.
Die Prinzipien Bedienbarkeit und Typkonvertierung sind maßgeblich für gute Programme.

Du hast keine Diskussionskultur.

Antworten