带图像和文字的Android选择器

时间:2013-03-19 09:42:23

标签: java android button imagebutton android-xml

我有一个按钮,我给出了这样的颜色,图像和文字:

android:background="@color/green"
android:drawableLeft="@drawable/custom_routes_start_button_icon"
android:text="@string/custom_route_start"

这是未选择状态,并希望所选状态如下:

android:background="@color/red"
android:drawableLeft="@drawable/custom_routes_stop_button_icon"
android:text="@string/custom_route_stop"

总而言之,我知道不可能在选择器中为text或drawableLeft(只能绘制)提供一个项目。有没有人知道实现这个目标的好方法?也许另一个xml文件,te选择器也可以参考?

4 个答案:

答案 0 :(得分:3)

你应该使用两个按钮,只显示其中一个。使用XML中的android:visibilitysetVisibility()来显示/隐藏按钮。

因此,首先使开始按钮可见并隐藏停止按钮。当用户按下开始按钮时,隐藏开始按钮并显示停止按钮。当用户按下停止按钮时,将其隐藏并再次显示开始按钮。

答案 1 :(得分:3)

我不确定ToggleButton(甚至复选框)是否适合您的用例。你确实可以使用选择器作为你的drawable(左,右,顶部,底部),使用selctor的背景,甚至是两个状态的不同文本。

实际上你可以为你的背景定义一个选择器(/res/color/custom_color.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/green"
          android:state_checked="true" />
    <item android:color="@color/red"
        android:state_checked="false"/>
 </selector>

和一个drawableLeft(/res/drawable/custom_drawable.xml)。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/custom_routes_start_button_icon"
          android:state_checked="true" />
    <item android:drawable="@color/custom_routes_stop_button_icon"
        android:state_checked="false"/>
 </selector>

最后你的ToggleButton定义为

android:background="@color/custom_color"
android:drawableLeft="@drawable/custom_drawable"
android:textOn="@string/custom_route_start"
android:textOff="@string/custom_route_stop"

您可能需要使用样式才能使其显示为您想要的效果。

虽然这是一个迟到的答案,但希望有人觉得它很有用。

答案 2 :(得分:1)

您可以通过代码更改此内容:

在xml文件中写下代码:

 android:background="@color/green"
 android:drawableLeft="@drawable/custom_routes_start_button_icon"
 android:text="@string/custom_route_start" 

并按下buttonClick事件:

    yourButton = (TextView) findViewById(R.id.yourButton);

    yourButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Drawable checkImg = getApplicationContext().getResources().getDrawable(
                       R.drawable.custom_routes_stop_button_icon);
            yourButton.setCompoundDrawablesWithIntrinsicBounds(checkImg, null, null,
            null);
            yourButton.setBackgroundColor(red);
            yourButton.setText(custom_route_stop);
        }
    });

您也可以将此代码放在Touchlistener上:

 yourButton.setOnTouchListener(new OnTouchListener() {
        boolean isTouch = false;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                Drawable checkImg = getApplicationContext().getResources().getDrawable(
                       R.drawable.custom_routes_stop_button_icon);
                yourButton.setCompoundDrawablesWithIntrinsicBounds(checkImg, null, null, null);
                yourButton.setBackgroundColor(red);
                yourButton.setText(custom_route_stop);  
            }
            else {
                Drawable checkImg = getApplicationContext().getResources().getDrawable(
                       R.drawable.custom_routes_start_button_icon);
                yourButton.setCompoundDrawablesWithIntrinsicBounds(checkImg, null, null, null);
                yourButton.setBackgroundColor(green);
                yourButton.setText(custom_route_start);
            }
            return false;
        }
    });

答案 3 :(得分:0)

您是否想要在单击按钮时更改按钮背景颜色? 是的,你可以做到这一点

首先定义状态

private int btnState = 1;
private final static int BUTTON_STATE_SELECTED = 0;
private final static int BUTTON_STATE_UNSELECTED = 1;

然后将ID设置为按钮

android:id="@+id/btnRoute"
android:background="@color/green"
android:drawableLeft="@drawable/custom_routes_start_button_icon"
android:text="@string/custom_route_start"

声明活动中的按钮

Button btnRoute = (Button) findviewbyid(R.id.btnRoute);

之后创建一个onclick监听器,它将根据状态

更改按钮颜色
private View.OnClickListener mOnClickBtnRoute = new View.OnClickListener() {
switch(btnState) {
case BUTTON_STATE_SELECTED:
btnRoute.setBackgroundColor(green);
btnRoute.setText(start);
Drawable img = getContext().getResources().getDrawable( R.drawable.custom_routes_start_button_icon );
btnRoute.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null );
btnState = BUTTON_STATE_UNSELECTED;
break;
case BUTTON_STATE_UNSELECTED:
btnRoute.setBackgroundColor(red);
btnRoute.setText(stop);
Drawable img = getContext().getResources().getDrawable( R.drawable.custom_routes_stop_button_icon );
btnRoute.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null );
btnState = BUTTON_STATE_SELECTED;
break;
}
};

然后不要忘记将监听器设置为按钮

btnRoute.setOnClickListener(mOnClickBtnRoute);

请记住所有的代码都在这里编码所以也许会有错误的类型所以请不要只是复制粘贴,但试着理解这个概念:)如果你对我的答案有一些疑问,请随意询问发表评论!