设置" 2背景"到一个按钮

时间:2018-06-16 22:28:08

标签: java android xml

我试图设置" 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

2 个答案:

答案 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>