我试图设置" 2背景"到一个按钮,第一个是xml文件,使按钮角倒圆,第二个是我想要的png图像。
我尝试使用android:background作为我的xml文件,并使用android:drawableTop作为我的图像,但是我的图像没有按下按钮。
我知道我们可以使用带有android的图像按钮:scaleType =" centerInside"缩放图片,但在我的情况下,我想为按钮做,因为我需要在其中放置文字...
你能帮帮我吗?
我的xml文件(对于圆角形状):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#FF008AB8"/>
<stroke android:color="#0299D0"/>
<corners android:radius="15dp"/>
</shape>
</item>
android:radius = "150dp"</selector>
感谢
LooKuM
答案 0 :(得分:1)
我不知道这是否有效(我不能添加注释lol)但是尝试在圆角的Corners XML文件中设置Image。
答案 1 :(得分:1)
您可以在xml drawable中使用图层列表,这样您就可以根据需要设置xml背景和图像,然后只设置一次背景。
这是一个例子
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/quarter_margin" />
<stroke
android:width="1dp"
android:color="@color/ash_gray" />
<solid android:color="@color/white" />
</shape>
</item>
<item android:drawable="@drawable/blue_back">
</item>
</layer-list>
另一种解决方案: 为了能够只使用一个布局并控制图像,您可以使用自己的自定义控件,这是一个示例
public class RecordButton extends LinearLayout {
@BindView(R.id.record_switch)
SwitchCompat recordSwitch;
@BindView(R.id.record_toggle_button)
ToggleButton recordButton;
private boolean checkable = true;
public RecordButton(Context context) {
super(context);
init(context, null);
}
public RecordButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public RecordButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(@NonNull Context context, @Nullable AttributeSet attrs) {
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.record_button, this);
ButterKnife.bind(this);
setGravity(Gravity.CENTER_HORIZONTAL);
applyAttr(attrs);
setChecked(false);
}
private void applyAttr(@Nullable AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs,
R.styleable.RecordButton, 0, 0);
// Set Image
int drawableResource = a.getResourceId(R.styleable.RecordButton_drawable, -1);
if (drawableResource > -1) {
int color = a.getColor(R.styleable.RecordButton_tint, -1);
if (color > -1) {
Drawable drawable = ContextCompat.getDrawable(getContext(), drawableResource);
Drawable wrapDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(wrapDrawable, Color.RED);
recordSwitch.setBackground(wrapDrawable);
} else {
recordSwitch.setBackgroundResource(drawableResource);
}
}
// Set Orientation
boolean isVertical = a.getBoolean(R.styleable.RecordButton_isVertical, false);
if (isVertical) {
setOrientation(VERTICAL);
}
a.recycle();
}
}
}
这里我夸大了一个布局,并添加到继承自LinearLayout的这个类中 这是布局膨胀
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.SwitchCompat
android:id="@+id/record_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:thumb="@android:color/transparent" />
<ToggleButton
android:id="@+id/record_toggle_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:clickable="false"
android:minHeight="0dp"
android:minWidth="0dp"
android:padding="@dimen/standard_margin"
android:textAllCaps="false"
android:textColor="@color/colorPrimary" />
</merge>
现在您的主要问题是,如何更改图像。在Java类中,您将找到一个名为applyAttr的方法,此方法将获取您添加到自定义控件的自定义属性
这是一个attr样本 此代码为attrs.xml文件
<declare-styleable name="RecordButton">
<attr name="drawable" format="reference" />
</declare-styleable>