我知道我可以通过调用performClick在代码中手动触发按钮的OnClickListener.onClick,但这似乎并没有使它在视觉上显示为已被点击。我正在寻找一种方法来手动使按钮显示,就像它被点击一样。我是否需要手动更改后台drawable和invalidate(然后在Handler.postDelayed调用上再次将其更改回来),还是有更多框架式的方法来执行此操作?
修改
我知道当用户启动印刷机时,如何使按钮具有不同的可绘制按钮。问题是:
是否有一种简单的方法可以在用户没有按下物理按下时以编程方式按下按钮?
解
我只是将Button子类化,并使按钮知道它的正常背景为StateListDrawable,而Drawable则用作按下状态。我公开了一个方法,手动将背景设置为“按下”drawable,我使用Handler.postAtTime让它返回到它的正常背景,这样当我完成它时它可以再次用作常规按钮。
答案 0 :(得分:4)
虽然这个问题很老,但我想我还是会回答它。您不需要继承View。首先调用performClick()
,视觉提示不会持续很长时间,但是您可以通过view.setPressed(true);
设置按钮的按下状态,然后在几毫秒之后重置它。
handler.postDelayed(new Runnable() {
@Override
public void run() {
view.setPressed(false);
}
}, 100);
答案 1 :(得分:0)
呀,你必须创建2个drawable。一个用于按下状态,另一个用于正常状态。
然后你必须创建一个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/focused_drawable" />
<item
android:state_pressed="false"
android:drawable="@drawable/unfocused_drawable" />
</selector>
将此xml放在drawable文件夹中。您还可以将聚焦状态添加为
android:state_focused="true"
然后在您的活动使用的布局中,在您的按钮标记内输入:
android:background="@drawable/your xml file name"