更改Backgroundcolor后如何从无边框按钮获得反馈? selectableItemBackground

时间:2013-05-26 13:24:17

标签: java android button borderless

昨天我试图解决我的按钮在禁用和启用它们后没有给出任何可见反馈的问题。 my problem

但答案并不符合我的愿望,这个按钮应该如何。最后,我想出了我自己的按钮与抽屉,而不是使用股票按钮。 但我不认为我不想改变我的按钮。 所以我希望我能在你的帮助下找到另一种方式。

要知道的重要事项是我改变了股票按钮的方式:How to create standard Borderless buttons

xml中的按钮:

        <Button
            android:id="@+id/buttonEat"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?android:attr/selectableItemBackground"
            android:paddingBottom="@dimen/padding_size"
            android:paddingTop="@dimen/padding_size"
            android:text="@string/button_eat"
            android:textColor="@color/white"
            android:textColorHint="@color/white"
            android:textSize="@dimen/text_size" />

我正在使用API​​ 14,因此API 11不是问题所在。

我有两种方法可以禁用和启用我的按钮。 启用它们后,它们仍然功能强大,但不提供任何触摸反馈。

private void startSleeping()
{
    editorState.putBoolean("SLEEPING", true);
    editorState.commit();

    buttonDrink.setEnabled(false);
    buttonEat.setEnabled(false);
    buttonWash.setEnabled(false);
    buttonDrink.setBackgroundColor(getResources().getColor(R.color.darkgray));
    buttonEat.setBackgroundColor(getResources().getColor(R.color.darkgray));
    buttonWash.setBackgroundColor(getResources().getColor(R.color.darkgray));
    buttonSleep.setBackgroundColor(getResources().getColor(R.color.orange));
    buttonWash.setTextColor(getResources().getColor(R.color.lightgray));
    buttonDrink.setTextColor(getResources().getColor(R.color.lightgray));
    buttonEat.setTextColor(getResources().getColor(R.color.lightgray));
    buttonSleep.setTextColor(getResources().getColor(color.black));
}

private void stopSleeping()
{
    editorState.putBoolean("SLEEPING", false);
    editorState.commit();

    buttonDrink.setEnabled(true);
    buttonEat.setEnabled(true);
    buttonWash.setEnabled(true);

// **Her is the problem**
// **if tried diffrent things**

// **First try: (brings back the old color but not the feedback)**
//      buttonDrink.setBackgroundColor(android.R.attr.selectableItemBackground);
// **Second try: (App crashes. Why? i don't know. The discription of selectableItemBackground says it is a drawable...)**
//buttonDrink.setBackgroundDrawable(getResources().getDrawable(android.R.attr.selectableItemBackground));
// **Third try: (eclips isn't accepting this because the attribut is a int and not a drawable)**
//buttonDrink.setBackgroundDrawable(android.R.attr.selectableItemBackground);
//**Fourth try: (brings back a feedback but changes the lock, feedback color...)**
TypedArray a = getBaseContext().obtainStyledAttributes(new int[]{android.R.attr.selectableItemBackground});
    Drawable backdraw = a.getDrawable(0);
    buttonDrink.setBackgroundDrawable(backdraw);

    buttonEat.setBackgroundColor(android.R.attr.selectableItemBackground);
    buttonWash.setBackgroundColor(android.R.attr.selectableItemBackground);
    buttonSleep.setBackgroundColor(android.R.attr.selectableItemBackground);
    buttonWash.setTextColor(getResources().getColor(R.color.white));
    buttonDrink.setTextColor(getResources().getColor(R.color.white));
    buttonEat.setTextColor(getResources().getColor(R.color.white));
    buttonSleep.setTextColor(getResources().getColor(R.color.white));
}

但是必须有一种方法可以从selectableItemBackground中恢复这些按钮的功能。

问题似乎是背景颜色的变化。 有人有任何想法吗?请告诉我

1 个答案:

答案 0 :(得分:1)

您可以创建自定义绘图,而不是更改代码中按钮的背景颜色,并为各种状态(启用,按下,...)定义颜色。 要创建自定义drawable,只需在/ res / drawable文件夹中创建一个XML文件,这里有一些示例内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" >
        <shape>
            <!-- define style for disabled state here -->
        </shape>
    </item>
    <item android:state_pressed="true" >
        <shape>
            <!-- define style for pressed state here -->
        </shape>
    </item>
    <item>
        <shape>
            <!-- define style for normal state here -->
        </shape>
    </item>
</selector>

形状标记的示例内容:

<solid
    android:color="#ffffff"/>
<stroke
    android:width="1dp"
    android:color="#000000" />
<corners
    android:radius="4dp" />
<padding
    android:left="10dp"
    android:top="10dp"
    android:right="10dp"
    android:bottom="10dp" />

现在,您可以将此drawable设置为布局xml文件中按钮的背景。然后,您只需要更改按钮的文本颜色。