gpt4 book ai didi

android - 禁用按钮在触摸时失去按下状态

转载 作者:行者123 更新时间:2023-11-30 00:59:15 27 4
gpt4 key购买 nike

我正在以编程方式生成一些按钮(一些按钮用于增加值,而另一些按钮用于减小值),当它们调整的值达到最大值或最小值时,我将禁用这些按钮。 (即,当达到最大值时“增加”按钮被禁用,而当达到最小值时“减少”按钮被禁用。)除了禁用之外,我还将按钮状态设置为“按下”以便在视觉上表示已达到极限值,按钮不再起作用。

“增加”按钮的 onClickListener 按钮如下所示:

increase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

// do some stuff

// here I enable the corresponding 'decrease' button because once you increase you can then decrease
setEnabled(decrease, true);

// if the maximum value is obtained, I disable the 'increase' button because you can't go higher
if (value == maximum) {
setEnabled(increase, false);
}
}
});

对应的'减少'onClickListeners也是类似的。

因为这些按钮正在改变它们自己的状态,所以我需要使用一个Handler 来调整Button.setEnabled()Button.setPressed() 在一个小的延迟之后,这样用户的手指就不会挡路(参见 https://stackoverflow.com/a/28788780/852795 )。这是上面使用的 setEnabled(final Button b, final boolean set) 方法:

private void setEnabled(final Button b, final boolean set) {
Handler refresh = new Handler(Looper.getMainLooper());
refresh.postDelayed(new Runnable() {
@Override
public void run() {
b.setEnabled(set);
b.setPressed(!set);
}
}, 250); // delayed post required to make pressed button accept setPressed()
}

一切都很好,除了一个小异常(exception):一旦用户按下“增加”按钮的次数足够多以达到最大值,该按钮将被禁用并且“按下”状态将设置为 true,但是,如果它随后被按下再一次,“按下”状态将被关闭。在功能上,该按钮被禁用。我知道这是因为没有调用 onClickHandler。为什么我的按钮会失去它的“按下”状态?我怎样才能阻止这种情况发生?

更新:查看https://stackoverflow.com/a/8693444/852795我尝试插入 onTouchListener() 以“拦截”关闭按下状态的触摸。但是,这也不会被调用,因为我想,该按钮被禁用了。

最佳答案

处理此问题的一种方法是使用 StateListDrawable 作为按钮的背景,并将 Disabled 状态设置为使用与 Pressed 状态相同的 drawable。这样您就可以避免在代码中设置 Pressed 状态。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/btn_pressed" /> <!-- pressed -->
<item android:state_enabled="false" android:drawable="@drawable/btn_pressed"/> <!-- disabled (same as pressed) -->
<item android:state_enabled="true" android:drawable="@drawable/btn_normal"/>
</selector>

关于android - 禁用按钮在触摸时失去按下状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com