我有这个按钮:
<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之前,这个问题就出现了。
答案 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标签替换为此自定义类