如何在Android中为按钮设置样式?

时间:2014-09-27 02:54:08

标签: android android-layout android-button android-styles

我在res文件夹中定义了以下文件。

styles_apptheme.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://android-holo-colors.com -->
<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="ButtonAppTheme" parent="android:Widget.Holo.Light.Button">
      <item name="android:background">@drawable/apptheme_btn_default_holo_light</item>
  </style> 
</resources>

themes_apptheme.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://android-holo-colors.com -->
<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="AppTheme" parent="@style/_AppTheme"/>

  <style name="_AppTheme" parent="Theme.AppCompat.Light">

    <item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_light</item>

    <item name="android:buttonStyle">@style/ButtonAppTheme</item>

  </style>

</resources>

在我的Layout.xml文件中,我已将我的按钮定义如下

<Button
        android:id="@+id/btnAddTitle"
        android:layout_below="@id/edEnterTitleValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn_AddTitle"
        android:layout_margin="20dp"
/>

如果我将以下行添加到上面的按钮视图中,

android:background="@style/ButtonAppTheme"

应用程序崩溃说应该为background属性设置drawable资源。

所以我创建了下面的drawable文件 - abc.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true"
        android:drawable="@drawable/apptheme_btn_default_normal_holo_light" />
    <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/apptheme_btn_default_disabled_holo_light" />
    <item android:state_pressed="true"
        android:drawable="@drawable/apptheme_btn_default_pressed_holo_light" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/apptheme_btn_default_focused_holo_light" />
    <item android:state_enabled="true"
        android:drawable="@drawable/apptheme_btn_default_normal_holo_light" />
    <item android:state_focused="true"
        android:drawable="@drawable/apptheme_btn_default_disabled_focused_holo_light" />
    <item
         android:drawable="@drawable/apptheme_btn_default_disabled_holo_light" />
</selector>

如果我设置android:background="@drawable/abc"我没有看到按钮中设置的样式。

所以请告诉我如何设置按钮的样式。

感谢。

5 个答案:

答案 0 :(得分:21)

如果你这样做会很简单。

首先在drawable文件夹中创建一个button_selector.xml。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" >
 <shape android:shape="rectangle"  >
     <corners android:radius="5dp" />
     <stroke android:width="1dip" android:color="@color/green_temp" />
     <gradient android:angle="-90" android:startColor="@color/green_temp" android:endColor="@color/green_temp"  />            
 </shape>
</item>
<item android:state_focused="true">
 <shape android:shape="rectangle"  >
     <corners android:radius="5dp" />
     <stroke android:width="1dip" android:color="#971E05" />
     <solid android:color="#58857e"/>       
 </shape>
</item>  
<item >
<shape android:shape="rectangle"  >
     <corners android:radius="5dp" />
     <stroke android:width="1dip" android:color="@color/bright_green" />
     <gradient android:angle="-90" android:startColor="@color/green_temp" android:endColor="@color/button_green" />            
 </shape>
</item>
</selector>

在values文件夹的colors.xml中添加这些颜色。

<!-- Green -->
<color name="green_temp">#23A96E</color>
<color name="green_dark">#159204</color>
<color name="bright_green">#02D8B0</color>
<color name="button_green">#10a54a</color>

最后在你想要的layout.xml按钮中放置选择器的背景。

<Button
    android:id="@+id/btnAddTitle"
    android:layout_below="@id/edEnterTitleValue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_AddTitle"
    android:background="@drawable/button_selector"
    android:layout_margin="20dp"
/>

然后完成所有按钮将使用您想要的颜色设置样式。

答案 1 :(得分:8)

Android Button Maker是在线工具,可为Android应用生成按钮代码。 Android API提供可绘制资源,其中XML文件定义几何形状,包括颜色,边框和渐变。 这些按钮基于形状可绘制的XML代码生成,与普通的png按钮相比加载速度更快。您可以在设置面板中自定义按钮属性并获取源代码。

点击此链接Button Maker

无需破解大脑...这个工具简化了

答案 2 :(得分:6)

替换

android:background="@style/ButtonAppTheme"

style="@style/ButtonAppTheme"

并且每件事都没问题!

答案 3 :(得分:4)

尝试此选择。在 res 下创建一个 drawable 文件夹,然后在代码下面创建xml文件和copypaste,然后先尝试根据您的要求进行自定义。

<强> button_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle">

<solid android:color="#00acc1"/>
<stroke android:width="2dp" android:color="#ffffff"/>
<corners android:radius="2dp"/> </shape>

<强> button_bg_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle">

<solid android:color="#006064"/>
<stroke android:width="1dp" android:color="#ffffff"/>
<corners android:radius="2dp"/> </shape>

<强> button_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:state_focused="true" android:state_pressed="true" 
        android:drawable="@drawable/button_bg_pressed" /> 
<item android:state_focused="false" android:state_pressed="true" 
        android:drawable="@drawable/button_bg_pressed" /> 
<item android:drawable="@drawable/button_bg" /> </selector>

现在在你的按钮xml中将背景设置为button_selector.xml

<Button
    android:id="@+id/btnAddTitle"
    android:layout_below="@id/edEnterTitleValue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_AddTitle"
    android:background="@drawable/button_selector"
    android:layout_margin="20dp"/>

这将为您完成这项工作。您可以通过这种方式自定义整个按钮样式。

答案 4 :(得分:2)

如果您想通过材质设计获得按钮的默认动画并更改按钮颜色,请尝试此操作。

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="@dimen/padding_12"
    android:text="button text here"
    android:theme="@style/NavyBtn" />

在style.xml中

<style name="NavyBtn" parent="Theme.AppCompat.Light">
    <item name="colorButtonNormal">#020e39</item>
    <item name="android:textColor">#FFFFFF</item>
</style>