"#paddingLeft 34;当我在Button上使用getText()+ setBackgroundDrawable()时消失

时间:2014-10-30 09:41:05

标签: android android-button android-styles

我有这个按钮:

 <Button
        android:id="@+id/btStatSerie"
        style="@style/ButtonPopUp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="15dp"
        android:text="@string/start_serie" />

哪种称呼这种风格

<style name="ButtonPopUp" parent="ParentTheme">
    <item name="android:background">@drawable/bt_menu_principal</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">15sp</item>
    <item name="android:paddingLeft">15dp</item>
    <item name="android:textAllCaps">true</item>
    <item name="android:drawableRight">@drawable/ic_flche_blanche_bas</item>
    <item name="android:gravity">left|center_vertical</item>
</style>

我使用setText()并同时setBackgroundDrawable()设置文字,以便向用户清楚地表达更改。

这将删除样式提供的paddingLeft。

除了在每个setBackground()下写一行以从代码中设置填充之外,有什么想法可以解决这个问题吗?

对我来说最重要的是,为什么会发生这种情况?

ty

编辑:xml drawable:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bt_border_pressed"
      android:state_pressed="true" />
<item android:drawable="@drawable/bt_border_focused"
      android:state_focused="true" />
<item android:drawable="@drawable/bt_border" />

bt_border和Cie。看起来只有颜色修改:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke 
    android:width="2dp" 
    android:color="@color/blue" /> 
<solid android:color="@color/blue" />    
<padding        
   android:bottom="5dp"       
   android:left="5dp"        
   android:right="5dp"
   android:top="5dp" />     
<corners android:radius="7dp" /> 
</shape>

我设置的新背景(现在使用setBackgroundResource())也遵循上面的模型(没有选择器)。当屏幕第一次显示时,填充就在那里,所以它确实以某种方式与改变背景相关联。此外,在我开始使用选择器作为xml drawable之前,这个问题就出现了。

2 个答案:

答案 0 :(得分:1)

我认为问题在于默认的Button drawable默认包含填充。新的drawable你的设置可能没有这个填充,因此填充消失。

例如,ICS的默认按钮可由一组九个补丁图像组成。那些九个补丁图像包含填充。

发布您正在使用的drawable的一些源代码可能有所帮助!

答案 1 :(得分:1)

调用setBackgroundDrawable()方法后必须设置填充。 你可以使一个类扩展Button,并覆盖setBackgroundDrawable(Drawable drawable)方法,如下所示:

@Override
public void setBackgroundDrawable(Drawable drawable) {
    int l = getPaddingLeft();
    int t = getPaddingTop();
    int r = getPaddingRight();
    int b = getPaddingBottom();

    super.setBackgroundDrawable(drawable);
    setPadding(l, t, r, b);
}

然后将Button标签替换为此自定义类