7

次のような色、画像、テキストを表示するボタンがあります。

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"

セレクターの項目にテキストまたはdrawableLeft(描画可能のみ)を指定することは不可能であることを私は知っています。誰かがこれを達成するための良い方法を知っていますか?たぶん、teセレクターも参照できる別のxmlファイルですか?

4

4 に答える 4

3

2つのボタンを使用し、そのうちの1つだけを表示する必要があります。android:visibilityXMLで使用しsetVisibility()、ボタンを表示/非表示にします。

したがって、最初にスタートボタンを表示し、停止ボタンを非表示にします。ユーザーがスタートボタンを押したら、スタートボタンを非表示にして、停止ボタンを表示します。ユーザーが停止ボタンを押したら、それを非表示にして、もう一度開始ボタンを表示します。

于 2013-03-19T09:55:48.073 に答える
1

これはコードで変更できます。

以下のコードを xml ファイルに記述します。

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

そしてボタンクリックイベントで:

    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);
        }
    });

このコードを onTouchlistener に配置することもできます。

 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;
        }
    });
于 2013-03-19T10:04:38.170 に答える
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);

すべてのコードがここでコーディングされていることを覚えておいてください。タイプミスがある可能性があるので、コピーして貼り付けるだけでなく、概念を理解してください:)私の答えについて質問がある場合は、コメントでお気軽に質問してください。

于 2013-03-19T09:56:10.190 に答える