在onClick之后的android按钮setPressed

str*_*rem 10 android state button

昨天我注意到可以通过兼容性软件包将Fragments集成到较旧的API级别中,但这对于这个问题并不是很重要.:)

我有一个带有OnClickListener的Button

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        doSomething();
        button.setPressed(true);
    }
});
Run Code Online (Sandbox Code Playgroud)

由于实际点击,它显示为按下,并且在释放点击后,按钮状态未被按下并保持这种状态.

是否有一种简单的方法可以在释放后按下按钮状态?我能想到的第一件事就是某种计时器,但这似乎是不合理的.

Mar*_*kes 25

请注意这是因为Android正在改变setPressed你之前和之后的两者onClickEvent,所以自己改变它没有任何效果.解决这个问题的另一种方法是使用onTouchEvent.

button.setOnTouchListener(new OnTouchListener() {

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

        // show interest in events resulting from ACTION_DOWN
        if (event.getAction() == MotionEvent.ACTION_DOWN) return true;

        // don't handle event unless its ACTION_UP so "doSomething()" only runs once.
        if (event.getAction() != MotionEvent.ACTION_UP) return false;

        doSomething();
        button.setPressed(true);                    
        return true;
   }
});
Run Code Online (Sandbox Code Playgroud)

  • 马丁,我非常喜欢你的回答.但是,当我单击通知区域或选项菜单时,按下的状态消失.你知道发生了什么吗? (2认同)

小智 13

ToggleButton而不是Button.

<ToggleButton
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/topping_selector"
    android:checked="false"
    android:textOff="Topping2"
    android:textOn="Topping2" />
Run Code Online (Sandbox Code Playgroud)

topping_selector.xml:

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

    <item android:state_checked="true" 
        android:drawable="@drawable/btn_topping_on" />

    <item android:state_checked="false" 
        android:drawable="@drawable/btn_topping_off" />

</selector>
Run Code Online (Sandbox Code Playgroud)


Kak*_*key 6

您可以将按钮状态保存在可绘制文件夹下的xml文件中,然后用作按钮的背景.例如:

 android:background="@drawable/buttonstate"
Run Code Online (Sandbox Code Playgroud)

buttonstate.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/back_focused" />
    <item android:drawable="@drawable/back" /> <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)

  • 不是我希望的,但谢谢!现在使用button.setSelected(true)并确定该状态的drawable (13认同)
  • 不是用户问的,不解决问题.这个答案真的不应该被批准. (3认同)