我的布局中有几个图像按钮,当单击可见图像按钮时它是不可见的,它将图像资源设置为不可见的图像按钮,并将其设置为可见,如下所示
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
btnmt2.setImageResource(R.drawable.happy);
btnmt2.setVisibility(View.VISIBLE);
btnmt2.setScaleType(ImageView.ScaleType.FIT_CENTER);
btnmt2.setPadding(5,5,5,5);
但可见图像按钮有一个背景,(背景是在xml中定义为几个形状的阴影)我希望图像在移动到不可见的时保留此背景,所以我尝试在xml中添加此没有用,图像资源似乎失去了它的缩放,或其填充,拉伸到背景的完整大小,所以我尝试在我的java文件中添加它来解决已弃用的方法,像这样
if (android.os.Build.VERSION.SDK_INT < 16) {
btnmt2.setBackgroundResource(R.drawable.dropshadow);
} else {
btnmt2.setBackground(getResources().getDrawable(R.drawable.dropshadow));
}
这样可以保持比例和填充但是背景没有添加,任何人都可以帮助我,不确定它是否是我的xml图像所以这里是
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape
android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<corners android:radius="5dp"/>
</shape>
</item>
<item android:right="18dp" android:left="18dp" android:top="10dp" android:bottom="4dp">
<shape
android:shape="rectangle">
<solid android:color="@android:color/darker_gray"/>
<corners android:radius="10dp"/>
</shape>
</item>
</layer-list>
答案 0 :(得分:0)
实际上已经存在一个已知的错误,即通过资源文件设置View的背景会导致它丢失它的填充(但需要一个参考链接。稍后再看看)。
我实际上使用这3种方法来解决这个问题,通过在实际加载图像之前/之后保存和恢复填充:
public static void setBackgroundResourceAndKeepPadding(View v, int resourceId) {
int top = v.getPaddingTop();
int left = v.getPaddingLeft();
int right = v.getPaddingRight();
int bottom = v.getPaddingBottom();
v.setBackgroundResource(resourceId);
v.setPadding(left, top, right, bottom);
}
public static void setBackgroundDrawableAndKeepPadding(View v, Drawable drawable) {
int top = v.getPaddingTop();
int left = v.getPaddingLeft();
int right = v.getPaddingRight();
int bottom = v.getPaddingBottom();
setBackgroundDrawable(v, drawable);
v.setPadding(left, top, right, bottom);
}
@SuppressLint("NewApi")
public static void setBackgroundDrawable(View v, Drawable drawable){
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) v.setBackgroundDrawable(drawable);
else v.setBackground(drawable);
}
调用其中任何一个setBackgroundResourceAndKeepPadding()方法都应该绕过你遇到的填充丢失问题。
但是,这是假设您在设置背景图像之前设置了填充;否则你的新填充(似乎是5px)将接管。如果情况也是如此,您可能需要确保这不是您遇到的问题的一部分,因为高分辨率设备上的5px看起来几乎不存在。