填充不适用于某些背景资源

任何人都可以向我解释为什么发生这种情况?

我有一个相当简单的类扩展TextView。 当我将背景色设置为Color.BLUE时,填充效果很好。 当我将背景资源更改为android.R.drawable.list_selector_background时,我的填充不再适用。 什么F?

这是我的UI类:

public class GhostDropDownOption extends TextView { TextView text_view; public GhostDropDownOption(Context context, AttributeSet attrs) { super(context, attrs); setup(context); } public GhostDropDownOption(Context context) { super(context); setup(context); } private void setup(Context context) { this.setClickable(false); // THE 2 LINES BELOW ARE THE ONLY THING I'M CHANGING //this.setBackgroundResource(android.R.drawable.list_selector_background); this.setBackgroundColor(Color.BLUE); } } 

我在这样的布局中使用它:

 <trioro.voyeur.ui.GhostDropDownOption android:id="@+id/tv_dropdown_option_1" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_vertical" android:text="@string/request_control_dropdown_option_1" android:textColor="#000000" android:padding="10dip"/> 

这是改变背景的结果: 在这里输入图像说明

Solutions Collecting From Web of "填充不适用于某些背景资源"

致电:

 this.setBackgroundResource(android.R.drawable.list_selector_background); 

将删除任何以前设置的填充(这是为了使它与9修补资产正常工作)。

尝试在上面的行后面的代码中设置填充,如下所示:

 this.setPadding(PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT); 

只要记住,发送到setPadding的值是以像素为单位不要下沉!

您应该尽可能将您的背景设置为XML。 如果你在代码中设置它,它将使用可绘制资源中的填充而不是你在XML中设置的内容,所以如果需要以编程的方式进行,你将需要检索当前填充,暂时存储,设置背景,然后按照@TofferJ的build议设置填充。

其原因是绘图本身可以具有填充,在9补丁图像的情况下(其中底部和右侧像素边界定义了填充量)。

你的解决scheme应该是设置您的背景资源在XML中:

android:background="@android:drawable/list_selector_background"

虽然我相信这可能是一个私人的drawable资源,你必须先复制到你的项目中。