【问题标题】:Android Button setPressed does not change animationAndroid Button setPressed 不改变动画
【发布时间】:2011-10-11 18:16:59
【问题描述】:

我想滥用标准按钮作为切换按钮,但仅限于长按。因此,我首先将默认样式替换为按下、聚焦和默认状态的背景图片。

<?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/btn_pressed" /> <!-- pressed -->
        <item android:state_focused="true" android:drawable="@drawable/btn_focused" /> <!-- focused -->
        <item android:drawable="@drawable/btn_default" /> <!-- default -->

    </selector>

我同时实现了 onClickListener 和 OnLongClickListener 如下:

private OnLongClickListener mFireHoldListener = new OnLongClickListener() {

    @Override
    public boolean onLongClick(View view) {
        Log.i(TAG, "Long FIRE");

        Button btn = (Button) view;
        btn.setPressed(true);
        btn.invalidate();
        Log.i(TAG, "isPressed: " + btn.isPressed());

        return false;
    }

};

如果我执行长按,按钮不会将其背景更改为 state_pressed。我怎样才能按住按钮?使用切换按钮不起作用,因为应该可以进行正常的单击操作。如果按钮被长时间按下,按钮会被“锁定”。

非常感谢

【问题讨论】:

  • 长按替换 btn.setPressed(true); with btn.setBackgroungResource(R.drawable.btn_pressed);
  • 非常感谢,它有效。我不确定它是否是“干净”的方式,但到目前为止它给了我想要的结果。

标签: android button background


【解决方案1】:

所以终于成功了。与故意使按钮状态为真相比,这是正确的方法

  @Override
    public boolean onLongClick(View view) {
        final Button btn = (Button) view;
        btn.post(new Runnable(
            public void run() {
                btn.setBackgroungResource(R.drawable.btn_pressed);
            }
        }

        return false;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2015-10-03
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多