1

在 Holo 主题中,当您单击一个按钮时,它会变为蓝色并闪烁片刻。现在我希望按钮保持这种外观,并在下次单击时恢复正常外观。怎么做?

更新:我的代码:

public class HomeActivity extends SherlockActivity {
org.holoeverywhere.widget.Button bt;
boolean isPressed = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_layout);
    bt = (org.holoeverywhere.widget.Button) findViewById(android.R.id.button1);
    bt.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                if (!isPressed) {
                    isPressed = true;
                } else {
                    isPressed = false;
                }
                bt.setPressed(isPressed);
            }

            return true;
        }
    });
}
}
4

2 回答 2

1

方法1:您可以为此按钮设置一个可绘制的选择器

1.Create a file `buttonbg.xml` in `drawable/`

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >

        <item
            android:state_focused="true"
            android:drawable="@drawable/focused_button" />
        <item
            android:state_pressed="true"
            android:drawable="@drawable/pressed_button" />
        <item
            android:drawable="@drawable/normal_button" />
    </selector>

2. Create necessary images for indicating states of button

3. Set this buttonbg.xml as background for this button.

4. set this button setPressed(true) inside button click. 

更多信息:如何在不影响按下和选择状态的情况下修改 Android 中的默认按钮状态?

方法二:

boolean isPressed = false;
((Button)findViewById(R.id.button)).setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                if(!isPressed){
                    isPressed = true;
                }else{
                    isPressed = false;
                }  
                        ((Button)findViewById(R.id.button)).setPressed(isPressed);                      
            }

                return true;
            }
        });
于 2013-09-04T08:20:18.257 回答
1

首先,您可以从此位置获取 SDK(按钮,复选框,无论是什么)使用的默认图像 ->

~\android-sdk\platforms\android-18\data\res\drawable-hdpi

在这里,我正在寻找 API-18。使用支持 Holo 主题的任何版本。

从那里,您可以找到类似 btn_default_pressed_holo_dark.9.png的图像。

将其复制粘贴到您的项目 drawable-hdpi 文件夹中。这是第一步。现在,

public class MainActivity extends Activity {
    Button b;
    Drawable back;
    int flag=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b=(Button) findViewById(R.id.button1);

        back=b.getBackground();

        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {   
                if(flag==0){
                    b.setBackgroundResource(R.drawable.btn_default_pressed_holo_dark);
                    flag=1;
                    }
                else{
                    flag=0;
                    b.setBackground(back);
                }
            }
        });
    }


}

核实 :)

于 2013-09-04T11:01:13.460 回答