0

我正在尝试在我的布局中使用标准的 android 按钮,但在未按下时使背景透明,或者使文本左对齐或右对齐,或者我想要的任何自定义修改。是否有一些我缺少从标准按钮继承但更改一些属性的简单方法?我查看了下面的两个帖子,但无法让它们工作,而且太新,无法在这些页面上发表评论,而且这两种解决方案都有问题:

我已经尝试根据如何禁用 onClick 上的默认按钮颜色更改属性复制 @android:drawable/btn_default 源,但是从那里链接到的所有资源都是私有的。我试图找到这些私人文件的来源,但即使我进入 android sdk 文件夹获取原始文件,我也找不到其中的一些文件。如果这是编辑标准按钮的方法,我在哪里可以找到这些文件?复制这些私人文件绝对不是理想的,如果标准选择/按下/任何按钮在另一个api中发生变化,在这种情况下我仍然会使用旧的并且按钮不一致......

此外,我还看到了具有不同颜色的标准 Android 按钮,这通常适合制作自定义按钮,但我如何将它设置为与标准按钮完全一样?即颜色是什么,渐变是否正确,等等。同样,如果标准按钮发生变化,我仍然会使用旧值。

4

2 回答 2

2

在按钮上使用样式:

<Button id= ... style="@style/myButton" />

值/样式.xml:

<style name="myButton" parent="@android:style/Widget.Button">
  <item name="android:background">@drawable/myBackground</item> 
</style>

要处理各种按钮状态(例如按下等),您需要一个选择器可绘制资源,例如 drawable/myBackground.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!--  Non focused states 
  --> 
  <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
  <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
 <!--  Focused states 
  --> 
  <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
  <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
 <!--  Pressed 
  --> 
  <item android:state_pressed="true" android:drawable="@drawable/button_press" /> 
</selector>

drawable/button_press.xml 可以根据需要指定渐变、形状、边框等。

一个做背景渐变、圆角和边框的 button_press.xml 示例:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <stroke android:width="1dp" android:color="#FF404040" /> 
  <corners android:radius="6dp" /> 
  <gradient android:startColor="#FF9B00" android:centerColor="#FFB300" android:endColor="#FFCA00" android:angle="90" /> 
</shape>
于 2012-07-12T17:36:48.943 回答
0

CSmith 关于使用带有 parent="@android:style/Widget.Button" 的样式的答案的第一部分是更改按钮属性(如左对齐或右对齐文本)的最佳方法。然而,答案的其余部分描述了如何创建自己的选择器,所以我想我会添加我的解决方案以从默认按钮继承选择器,然后只覆盖你想要更改的特定选择器:

只需将 android:drawable="@android:drawable/btn_default" 用于您想要默认行为的那些选择器,然后您可以只为您想要更改的那些选择器指定自定义字段。在我尝试拥有一个继承所有选择器但通常具有透明背景而不是灰色背景的按钮的情况下,请执行以下操作(为了清楚起见,在此处复制 CSmith 答案的第一部分,感谢 CSmith!):

使用自定义样式定义按钮:

<Button id= ... style="@style/myButton" />

res/values/styles.xml:

<style name="myButton" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/myBackground</item>
    ...other changes to default button... 
</style>

然后,继承所有选择器并覆盖显示灰色的选择器:在 res/drawable/myBackground.xml 中:

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" 
          android:drawable="@drawable/transparent_btn" />    
    <item android:state_pressed="true"
          android:drawable="@android:drawable/btn_default" />
    <item android:state_focused="true"
          android:drawable="@android:drawable/btn_default" />
    <item android:drawable="@drawable/transparent_btn" />
</selector>

并且,在 res/drawable/transparent_btn.xml 中:

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

注意:这个例子不担心 state_enabled,如果你想要一个按钮是否启用的特定行为,也只是覆盖那些选择器。

于 2012-07-12T20:00:56.457 回答