2017-01-26 3 views
0

Ich erstelle einen benutzerdefinierten Schaltflächenstil und wendet ihn auf alle Schaltflächen in meinem Thema an, aber die Schaltflächen scheinen nicht auf den Teil des Stils zu reagieren, der ihre Ränder ändern soll.Android: Benutzerdefinierte Schaltflächenstil erkennt keine Ränder

(Hier ist das Tutorial Ich folgte das lernen: http://www.androidcookbook.com/Recipe.seam?recipeId=3307) (? Nicht sicher, ob es für Sie wichtig)

Hier ist die Form, die ich bin für die Taste:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid 
     android:color="#2AB571" /> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:bottomRightRadius="25dp" /> 
    <corners android:topLeftRadius="25dp" /> 
</shape> 

Und hier ist der Stil button I (mit dem Rand an der Unterseite eingestellt) erstellt haben:

<style name="button" parent="@android:style/Widget.Button"> 
    <item name="android:gravity">center_vertical|center_horizontal</item> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:shadowColor">#FF0000</item> 
    <item name="android:shadowDx">0</item> 
    <item name="android:shadowDy">-1</item> 
    <item name="android:shadowRadius">0.2</item> 
    <item name="android:background">@drawable/button</item> 
    <item name="android:minHeight">48dip</item> 
    <item name="android:minWidth">88dip</item> 
    <item name="android:layout_margin">50dp</item> 
</style> 

Dann ist hier, wo ich die button zu meinem Thema bin Anwendung:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
     <style name="GreenBlueTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
      <!-- Customize your theme here. --> 
      <item name="colorPrimary">@color/colorPrimary</item> 
      <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
      <item name="colorAccent">@color/colorAccent</item> 
      <item name="android:buttonStyle">@style/button</item> 
     </style> 
</resources> 

Dann hier ist ein Bild, wie es aussieht: Why no margins?

Warum keine Marge von 50dp?

Danke für Ihre Hilfe, Rune.

Antwort

1

Versuchen Sie dieses

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" > 
     <Button 
     android:text="button1" 
     style="@style/button"/> 
     <Button 
     android:text="button2"    
     style="@style/button" /> 
</LinearLayout> 

Erläuterung: Attribute, die mit layout_ beginnen LayoutParams sind, oder einer ihrer Unterklassen (z.B. MarginLayoutParams). LayoutParams werden von Ansichten verwendet, um der übergeordneten ViewGroup mitzuteilen, wie sie angeordnet werden sollen. Jede ViewGroup-Klasse implementiert eine geschachtelte Klasse, die ViewGroup.LayoutParams erweitert. Daher sind LayoutParams spezifisch für den Typ der ViewGroup. Dies bedeutet, dass, während ein TableLayout und ein LinearLayout sowohl layout_margin als eines ihrer LayoutParams haben können, sie als völlig unterschiedliche Attribute betrachtet werden.

Also layout_margin ist nicht nur ein allgemeines Attribut, das überall angewendet werden kann. Sie muss im Kontext einer ViewGroup angewendet werden, die sie speziell als gültiges Argument definiert. Eine Ansicht muss den Typ ihrer übergeordneten ViewGroup kennen, wenn LayoutParams angewendet wird. Wenn Sie layout_margin in einem Stil angeben, einschließlich dieses Stils in einem Design, und versuchen, dieses Design auf eine Anwendung/Aktivität anzuwenden, werden die Layoutattribute gelöscht, da noch kein ViewGroup-Parent angegeben wurde und die Argumente somit vorhanden sind ungültig. Das Anwenden des Stils auf eine EditText-Ansicht, die mit einem TableLayout definiert wurde, funktioniert jedoch, da die übergeordnete ViewGroup (das TableLayout) bekannt ist.

Entnommen Android - margins specified in custom style not taking effect

Quellen:

Android-Dokumentation auf Layout-Parameter.

+0

Ich probierte nur ein paar Tasten in einem linearen Layout und wenden Sie den Stil auf jeden von ihnen. Nichts anderes ist passiert. Bis auf die Ränder wurde alles angewendet. Ich habe jedoch 'android: layout_margin = "25dp"' auf einen einzigen Button angewendet und den Rand angewendet. –

+0

Es muss eine Möglichkeit geben, Ränder in einem Stil (oder etwas Ähnlichem) anzuwenden. Die ursprüngliche Schaltfläche, die von Android Studio verwendet wird, hat Ränder, die gut sind. –