German Button mit Rahmen

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,
kann ich irgendwie im Designer einem Button einen kleinen Rahmen verpassen.
Finde ich das nicht oder geht das nicht? Danke.
 

BlueVision

Well-Known Member
Licensed User
Longtime User
Wenn das ein Standard-Button ist, ändere mal Defaultdrawable in den Eigenschaften des Buttons auf StateListDrawable.
Alternativ könntest Du auch einen SWIFT-Button verwenden oder sogar ein Label.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,
so bekomme ich zwar den Rahmen, aber sowie ich die Farbe des Buttons wechsle (z.B. btnTimer.color=Colors.Green) ist der Rahmen wieder weg.
Kann ich das verhindern oder den Rahmen neu zeichnen? Danke.
PS. ich möchte am liebsten einen "normalen" Button verwenden.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Hier habe ich eine Lösung gefunden:
 

klaus

Expert
Licensed User
Longtime User
Es gibt eine andere Lösung.
Du kannst die Buttons als B4XView deklarieren und dann kannst Du die Farben ändern mit:
B4X:
Button1.SetColorAndBorder (BackgroundColor As Int, BorderWidth As Int, BorderColor As Int, BorderCornerRadius As Int)
Und das gilt auch für B4J und B4i.
Aber falls Du wirklich die StatelistDrawable willst ist die Lösung im oberen Link OK.
Mit StatelistDrawable ändern sich die Farben auch wenn man den Button drückt.
 

BlueVision

Well-Known Member
Licensed User
Longtime User
Einige B4X-Steuerelemente haben leider die dumme Angewohnheit, eine einmal zugewiesene Eigenschaft wieder zu verlieren. Ich helfe mir damit:

Der Code stammt hier aus dem Forum, ist nicht auf meinem Mist gewachsen. Funktioniert super. Nur ein Beispiel.
XFTProvider ist in diesem Fall ein B4XFloatingTextField

B4X:
'Feldeigenschaften wiederherstellen.
Private Sub XFTFProvider_TextChanged (Old As String, New As String)
    Dim et As EditText = XFTFProvider.TextField
    Dim cd As ColorDrawable
    cd.initialize2(xui.Color_ARGB(255,245,245,245), 5dip, 0dip, 0)
    et.Background=cd
End Sub

Edit:
Und ja, ich gebe Dir Recht. Der Swiftbutton ist vielleicht ganz nett anzusehen. Er hat aber einen kleinen Designfehler. Die Beschriftung ist vertikal zentriert über die gesamte Objektgröße, nicht über die Oberfläche des Buttons selbst. Wenn Du Form und Farbe eines Buttons frei und ohne Probleme mit den Standard-Bedienenelementen konfigurieren möchtest, lass den Standard-Button links liegen. Nimm stattdessen ein Label. das funktioniert perfekt als Button.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Einige B4X-Steuerelemente haben leider die dumme Angewohnheit, eine einmal zugewiesene Eigenschaft wieder zu verlieren.:
Kannst Du das näher erklären.

B4XFloatingTextField ist aber keine B4XView sondern eine b4xlib CustomView.

Und Dein Code ist aber B4A spezifisch.
Hast Du mal versucht 'et' so zu deklarieren Dim et As B4XView und nicht mit Dim et As EditText?
In B4A, so wie ich mich erinnere, geht der Rahmen verloren wenn man die Farbe mit Color oder ColorDrawable setzt.
Dafür muss man StatelistDrawable nehmen.
 

BlueVision

Well-Known Member
Licensed User
Longtime User
Du hast wie immer Recht Klaus. Sollte auch nur ein Beispiel sein. Ein FloatingTextField ist nun mal auch kein Button, um den geht es ja hier. Das beschriebene Problem kam mir aber irgendwie nur allzu bekannt vor. Deswegen der Vergleich. Ja, der Code stammt aus einem B4X-Code eines B4A-Programms. Das FloatingTextField ist als B4XFloatTextField unter Globals definiert. Dann ging es eigentlich nur darum, die Hintergrundfarbe zu ändern. Soweit ich mich erinnern kann, klappt das auch, solange man unter B4A dann nicht in diesem Feld herumeditiert. Dann vergisst das Feld nämlich die zugewiesenen Eigenschaften und stellt sich wieder auf Standardeinstellungen zurück. Ich kann leider im Moment nicht im Code nachsehen und das ausprobieren. Das Programm war jetzt auch nicht der Rede wert, vielleicht habe ich nicht einmal mehr den Quellcode. Mein Workaround für das Problem war etwas brachial: Ich wies dem Textfeld über die Textchanged-Routine immer wieder die Eigenschaften neu zu. Anders habe ich das nicht hinbekommen.

Und wie gesagt, eigentlich verwende ich gar keine Buttons mehr unter B4A. Label sind irgendwie flexibler und lassen sich wunderbar als Buttons benutzen.
 
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
Aber falls Du wirklich die StatelistDrawable willst ist die Lösung im oberen Link OK
funktioniert prima so und es geht auch nur um einen Button.

PS.: da es eine alte aber prima funktionierende B4A-App ist die ich nicht neu/umschreiben möchte gibt es da noch kein "B4XView"
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…