35

可能重复:
Android。在该按钮创建的操作完成之前,如何保持按钮显示为 PRESSED?

我有一个按钮,当我按下它时,我希望它保持按下状态(Froyo 上的绿色)。

有什么帮助吗?

mycodes_Button = (Button) findViewById(R.id.mycodes);
...
if (saved_Button.isPressed())
{
    saved_Button.setFocusable(true);
}

像这样的东西?

4

3 回答 3

48

我在使用自定义背景的按钮时遇到了这个问题,并最终为此使用了选定状态。该状态适用于所有视图。

要使用它,您必须将自定义按钮背景定义为状态列表

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_selected="false" android:state_focused="false" 
     android:state_pressed="false"><bitmap ... /></item>
  <item android:state_selected="true"><bitmap ... /></item>
  <item android:state_focused="true"><bitmap ... /></item>
  <item android:state_pressed="true"><bitmap ... /></item>
</selector>

然后使用该背景,假设它/res/drawable/button_bg.xml在您的布局文件中,您使用:

...
<Button android:background="@drawable/button_bg" ... />
...

在您的代码中,您可以在 onClick 侦听器中切换到(取消)选择状态:

myButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    v.setSelected(true);
    // normal click action here
  }
});

激活状态更符合预期含义,但仅适用于 Android 3.x 及更高版本。

于 2012-01-05T18:55:52.393 回答
41

使用以下代码。这很有用。

mycodes_Button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        mycodes_Button.setPressed(true);
        return true;
    }
});
于 2011-01-20T13:18:50.127 回答
6

ToggleButton会满足您的需求吗?

从您的评论来看,您似乎不知道Touch Mode。在这种模式下,这是大多数事情的默认模式,没有焦点(这是您想要实现的),也没有选定的项目。

您可以尝试以编程方式退出触摸模式,但我不建议这样做。经过一段时间的习惯后,触控模式会给用户带来更好的体验。

于 2011-01-20T12:53:21.560 回答