Android:自定义按钮样式无法识别边距

时间:2017-01-26 02:30:18

标签: android button styles margin

我正在创建一个自定义按钮样式并将其应用到我主题中的所有按钮,但按钮似乎没有对更改其边距的样式部分做出反应。

(以下是我学习的教程: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>

然后是这样的图像: Why no margins?

为什么没有50dp的保证金?

感谢你的帮助,Rune。

2 个答案:

答案 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的类型。这意味着虽然T​​ableLayout和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)

我在此链接上找到了解决方法:getimagesize()

搜索'inset'。

在'shape'元素周围应用'inset'标记允许您应用类似于边距的内容。现在似乎对我有用。