Button-Darstellung global modifizieren (nur bestimmte Parameter!)

  • Hallo,


    ich bin hier ziemlich neu und muss offenbaren, dass ich mich in Sachen UI im Gegensatz zu Java und den Programmcodes selbst noch nicht wirklich auskenne.
    Ein großes Fragezeichen erstreckt sich dabei über die Themen Styles (insbesondere was die Vererbung angeht) - XML-Dateien - Themes. Wenn also jemand Seiten oder Tutorials kennt, die diese Thematik SEHR leicht und verständlich erklären, wäre ich sehr dankbar!


    Aktuell stehe ich vor dem folgenden, konkreten Problem:


    Ich möchte, dass alle Buttons in meiner App, egal in welchem Zustand, runde Ecken bekommen (das geht irgendwie unter Android Background ... shape ... Corners ... radius). Der Rest soll quasi Default bleiben.


    Ich habe herausgefunden, wie ich die Default-Werte für alle Buttons ändern kann, allerdings nicht, wie ich nur eine Eigenschaft (die mit den runden Ecken) ändere. D.h., ich muss gleich alle anderen Eigenschaften mitdefinieren, ansonsten wird der Button unsichtbar.


    Wenn ich im Javacode folgendes schreibe:


    stopButton.setBackgroundResource(android.R.drawable.btn_default);


    Dann sieht der Button sehr gut aus. Diese Darstellung würde ich gerne als Default haben. Ich denke die Darstellung rührt aus meiner styles.xml, kann das sein? dort steht:

    Code
    <resources xmlns:android="http://schemas.android.com/tools">    
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="colorPrimary">@color/colorPrimary</item>        
      <item name="colorPrimaryDark">@color/colorPrimaryDark</item>        
      <item name="colorAccent">@color/colorAccent</item>    
     </style>


    Nun, was muss ich ändern, damit diese Darstellung, die ich mit dem Java-Befehl umgesetzt habe, Default wird bzw. bleibt und die Buttons runde Ecken erhält? Für die Umsetzung wäre ich sehr dankbar, wenn ich möglichst wenige, neue .XML - Dateien erzeugen muss (für bessere Übersicht und Verständlichkeit).


    Vielen Dank !!

  • Gebe die Radien mit an, welche die Buttons haben sollen.
    Teste mal das:

    Code
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
        <solid android:color="#eeffffff" />
        <corners android:bottomRightRadius="8dp"
            android:bottomLeftRadius="8dp"  
            android:topRightRadius="8dp"
            android:topLeftRadius="8dp"/>
    </shape>

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Ich habe hier zwei Posts gefunden, wo Leute mehr oder weniger das gleiche versucht haben. Allerdings geht das drunter und drüber, wenn ich das bei mir einbringe (Fehlermeldungen, Buttons werden garnicht mehr angezeigt, etc.) aber vielleicht kann ja jemand hieraus die schnelle und einfache Lösung ableiten, nach der ich suche.


    https://stackoverflow.com/ques…of-an-android-application


    https://stackoverflow.com/ques…ns-in-android-application

  • Gebe die Radien mit an, welche die Buttons haben sollen.
    Teste mal das:

    Code
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
        <solid android:color="#eeffffff" />
        <corners android:bottomRightRadius="8dp"
            android:bottomLeftRadius="8dp"  
            android:topRightRadius="8dp"
            android:topLeftRadius="8dp"/>
    </shape>


    Hey, danke!


    Aber wie kann ich dieses Shape einbinden, sodass dass dies Default wird? Also in der styles.xml (richtig?)

  • erstelle dir eine neue RoundShapeBtn.xml
    Dort bindest du den code ein, den ich dir gegeben habe.


    Deinen Buttons kannst du jetzt folgenden Verweis hinzu fügen.

    Code
    android:background="@drawable/RoundShapeBtn"

    für einen Standart um nicht jedes mal auf die .xml zu verweisen kenne ich leider keine Möglichkeit.

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Hallo du könntest es gleich in deinen Layout setzen etwa so


    oder du erstellst ein neues Theme in der styles.xml
    diesen Theme must du dann in deiner App Laden. z.B. im manifest.xml

    Code
    <application
       
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/deinTheme" >
  • cool,
    Sind die Runden Ecken dann Standart?


    Hab mit dem xml Kram nicht so oft zu tun.


    <was ein Glück, ich mag die spitzen Klammern nicht.>
    :)

    Kann Spuren von persönlicher Meinung, Sarkasmus und Lakritz enthalten. Einzelne Wörter nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: suche bei Google

  • Ja die müssten so wie du sie in der RoundShapeBtn.xml Definiert hast aussehen.


    um es in das Theme einzubauen in der styles.xml danach im Manifest bei
    application für die gesampe App oder für die jeweilige Activity das Theme setzen.

    Code
    <style name="DeinTheme" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/RoundShapeBtn</item>
    </style>
  • Halloa armai123mai;


    natürlisch kanst du das was du in den zwei links oben angegeben hast nicht 1zu1 in den Programm Übernehmen. soetwas solte man sich immer nur als Beispiel nehmen. Aber in den Links werden auch keine Runden Ecken erzeugt.
    Es geht um Schriftgröse Hindergundfarbe abstände usw.
    Aber das Prinzip von der Style.xml wird behandelt.

  • Hey Ihr beiden,


    vielen vielen Dank!


    Das finde ich sehr gut. Die Sache jedoch ist, dass ich im Programm manche Buttons ständige ändere, und zwar hiermit:


    Button.setBackgroundResource(R.drawable.button);



    und


    Button.setBackgroundResource(android.R.drawable.btn_default);



    wie würden sich diese Interaktionen verhalten?



    Die Änderung des gesamten Themes wie es jogimuc verschlägt scheint die exakte Antwort auf meine Frage zu sein. So könnte ich die nicht-runden Buttons, welche sowieso nie zum Einsatz kommen sollen, von Anfang an gleich eliminieren und mir nie wieder Gedanken um sie machen. Ich würde nun wie folgt vorgehen:


    1. manifest.xml


    Code
    <application
    
    
       ...
    
    
            android:theme="@style/deinTheme" >


    2. styles.xml


    Code
    <style name="DeinTheme" parent="@android:style/Theme.Dialog">
    
    
        <item name="android:windowBackground">@drawable/RoundShapeBtn</item>
    
    
    </style>

    3. RoundShapeBtn.xml

    Wichtige Fragen:


    1. Wenn ich nun in meinem Programm diese Codes ausführe:


    Button.setBackgroundResource(R.drawable.button);
    Button.setBackgroundResource(android.R.drawable.btn_default);



    sind dann anschließend die runden Ecken weg oder noch da?



    2. Kann ich statt


    Theme.Dialog


    auch


    Theme.AppCompat.Light


    schreiben? Davon hätte ich nämlich gerne die Buttoneigenschaften (bis auf die Eckformen).

  • Etwas ich noch nicht ganz verstanden habe:


    meine Buttons sehen zu beginn immer anders aus, als dann, wenn ich


    Button.setBackgroundResource(android.R.drawable.btn_default);


    ausführe. Woran liegt das? Ich dachte ja immer, dass durch diesen Aufruf der Standardbackground, so wie er zu Beginn sein müsste, wieder eingestellt wird.


    hier meine styles.xml:


  • So wie ich es jetzt sehe willst du die Bottom programmatisch in Java erzeugen. Ob das da auch geht weiß ich nicht habe ich noch nicht gemacht. Erstelle mein Layout immer in XML.


    Mir wäre es auch lieber wenn ich alles in XML definieren könnte!


    Meine App hat jedoch zwei Buttons, die im Enabled-Zustand anders aussehen sollen, und zwar ein 9-Patch-Image (button.9.png im drawable-Ordner) als Hintergrund haben. Das habe ich so bewirkt:



    Button.setBackgroundResource(R.drawable.button);


    Wenn der Button dann disabled wurde, habe ich ihn dann wieder zum normalen Aussehen versetzt:


    Button.setBackgroundResource(android.R.drawable.btn_default);


    Wenn ich das in XML machen wollen würde, müsste ich einen neuen Button-Style definieren, indem diese Background-Resource in Abhängigkeit des Enabled-Zustands definiert ist, richtig? Kannst du mir sagen, wie ich hierzu vorgehen müsste?


    Übrigens, das 9-Patch-Button-Image hat runde ecken, btn_default jedoch nicht. und genau hier liegt das Problem.

  • Hmm sicher dass ich in der styles.xml


    <item name="android:windowBackground">@drawable/RoundShapeBtn</item>


    und nicht Android:buttonStyle o.ä. schreiben muss?


    mit windowBackground ändert sich Garnichts, mit buttonStyle hingegen mehr. Allerdings sind die Buttons dann (wahrscheinlich) mangels Einstellungen in der RoundShapeBtn.xml nicht mehr sichtbar (nur noch der Text, oben links zentriert).
    [*]

  • Okay ich befürchte, dass das, was ich vor hatte, grundsätzlich nicht möglich war/ist.
    Ich wollte die btn_default bzw. die Buttons aus Widget.AppCompat.Light.ActionBar verwenden, und zwar mit abgerundeten Buttons, da sie ziemlich eckig sind und mir das nicht gefällt.
    Während man in Android Studio recht gut und einfach eigene Buttonstyles designed und anwenden kann, ist es wohl nicht vorgesehen, dass man bestehende Buttonstyles übernimmt und modifiziert. Zumindest ist es mir in 2 Tagen nicht gelungen.

  • hallo vieleicht hilft das auch etwas weiter

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!