我正在创建一个自定义按钮样式并将其应用到我主题中的所有按钮,但按钮似乎没有对更改其边距的样式部分做出反应。
(以下是我学习的教程:http://www.androidcookbook.com/Recipe.seam?recipeId=3307)
这是我用于按钮的形状(不确定它对你来说重要吗?):
<?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>
这是我创建的样式buttonStyle(边缘设置在底部):
<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>
然后在这里我将buttonStyle应用于我的主题:
<?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>
为什么没有50dp的保证金?
感谢你的帮助,Rune。
答案 0 :(得分:1)
试试这个
<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>
说明:以layout_开头的属性是LayoutParams或其子类之一(例如MarginLayoutParams)。视图使用LayoutParams告诉其父ViewGroup如何布局它们。每个ViewGroup类都实现一个扩展ViewGroup.LayoutParams的嵌套类。因此,LayoutParams特定于ViewGroup的类型。这意味着虽然TableLayout和LinearLayout都可以将layout_margin作为其中一个LayoutParams,但它们被认为是完全不同的属性。
因此layout_margin不仅仅是可以在任何地方应用的一般属性。它必须在ViewGroup的上下文中应用,ViewGroup特别将其定义为有效参数。应用LayoutParams时,视图必须知道其父ViewGroup的类型。
在样式中指定layout_margin(包括主题中的样式)并尝试将该主题应用于应用程序/活动将导致布局属性被删除,因为尚未指定ViewGroup父级,因此参数无效。但是,将样式应用于已使用TableLayout定义的EditText视图,因为父ViewGroup(TableLayout)已知。
取自 Android - margins specified in custom style not taking effect
来源:
有关布局参数的Android文档。
答案 1 :(得分:0)