1

ここstackoverflowには非常に多くの関連する質問があり、おそらく答えは簡単なので、これはばかげた質問に違いありません。しかし、とにかくここにあります。ボタンがあり、そのための描画可能な xml を作成します。だから私のボタンの下にコードがあります:

<Button
            android:id="@+id/button2"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="match_parent"
            android:layout_height="30dip"           
            android:background="@drawable/button2" 
            />

今、私の drawable/button2 の下に、画像を使用していないセレクターを作成しました。これが私のコードです:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
    <shape>
        <solid
            android:color="#FF9E35" />
        <stroke
            android:width="1dp"
            android:color="#992f2f" />
        <corners
            android:radius="0dp"
            android:topLeftRadius="8dp"
            android:bottomLeftRadius="0dp"
            android:topRightRadius="0dp"
            android:bottomRightRadius="8dp" />
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp" />
    </shape>
 </item>
 <item>
    <shape>
        <gradient
            android:startColor="#FF9E35"
            android:endColor="#992f2f"
            android:angle="270" />
        <stroke
            android:width="1dp"
            android:color="#992f2f" />
        <corners
            android:radius="0dp"
            android:topLeftRadius="8dp"
            android:bottomLeftRadius="0dp"
            android:topRightRadius="0dp"
            android:bottomRightRadius="8dp" />
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp" />
    </shape>
    </item>
   </selector>

今私が達成しようとしているのは、そのボタンをクリックすると、その背景色が state_pressed が意味するものに変更され、別のボタンがクリックされると通常に戻ることです(ほとんどの場合トグルボタン) コードでそれを行う方法はありますかxmlセレクターの後ろまたは中にありますか?

ありがとう、

JC

4

1 に答える 1

2

それを達成するためにJavaコードで実際にできることは次のとおりです。

public class LaunchActivity extends Activity implements OnTouchListener{

    private Button yourButton;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.main);      

        yourButton= (Button)findViewById(R.id.yourButton);
        yourButton.setOnTouchListener(this); 

    }

    @Override
    public boolean onTouch(final View view, MotionEvent event) {

    final int action = event.getAction();

        if(view.getId()==R.id.yourButton){
            if(action == MotionEvent.ACTION_DOWN)
                  yourButton.setBackgroundResource(R.drawable.ic_button_pressed);
            if(action == MotionEvent.ACTION_UP)
                  yourButton.setBackgroundResource(R.drawable.ic_button_normal);
        }

 }
}

彼が押された場合、ボタンの背景が変更されます。ユーザーが指を離すと、背景が再び変わります。別のボタンが押された場合にのみ背景を変更する場合は、 ACTION_UP ケースを記述しないでください。別のボタンの ACTION_DOWN ケースでは、他のボタンの背景を変更します。以下を参照してください。

 @Override
        public boolean onTouch(final View view, MotionEvent event) {

    final int action = event.getAction();

        if(view.getId()==R.id.yourButton){
            if(action == MotionEvent.ACTION_DOWN){
                  secondButton.setBackgroundResource(R.drawable.ic_button_normal);
                  yourButton.setBackgroundResource(R.drawable.ic_button_pressed);
            }
        }
            if(view.getId()==R.id.secondButton){
            if(action == MotionEvent.ACTION_DOWN){
                  yourButton.setBackgroundResource(R.drawable.ic_button_normal);
                  secondButton.setBackgroundResource(R.drawable.ic_button_pressed);
            }
        }

 }

それが役に立てば幸い !

于 2012-08-13T08:42:00.460 に答える