![](/img/trans.png)
[英]Android. How do I keep a button displayed as PRESSED until the action created by that button is finished? Activated/Selected not usable
[英]Android. How do I keep a button displayed as PRESSED until the action created by that button is finished?
我有button_focused
、 button_pressed
和button_normal
圖像。 當我按下按鈕時,將顯示button_pressed
圖像並開始與按下按鈕相關的操作。
當我停止按下按鈕時,動作繼續,但按鈕返回到正在顯示的button_normal
圖像。
如何在整個操作期間將顯示的按鈕圖像設置為button_pressed
然后重置為button_normal
圖像?
謝謝你的時間
我使用了一個類似的功能
void setHighlighted(boolean highlight) {
button.setBackgroundResource( highlight
? R.drawable.bbg_pressed
: R.drawable.button_background);
}
其中button_background是在所定義的選擇button_backgroung.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/bbg_pressed"></item>
<item android:state_focused="true" android:drawable="@drawable/bbg_selected"></item>
<item android:drawable="@drawable/bbg_normal"></item>
</selector>
也就是說,這段代碼不會干擾Android框架使用的按下狀態; 相反,它改變了背景,使按鈕看起來被按下。
如果您只需要一個兩狀態按鈕,則更清楚一點:
您不需要自己的button.xml
。 您可以正常使用Android。
如果您單擊按鈕,則button.setPressed(true)
將不起作用,因為一旦您松開按鈕,Android 就會重置它。 先嘗試設置另一個按鈕setPressed
狀態,看看效果。
這意味着,要在同一個按鈕上使用它,必須將其設置為延遲。 這是一個工作示例。 當然,上面提到的改變背景的方法(通過 long id 18 ..)也有效。
private final Handler mHandler = new Handler();
rootView.findViewById(R.id.yourButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean pressed = false;
if (v.getTag() instanceof Boolean)
pressed = (boolean) v.getTag();
final boolean newPressed = !pressed;
// setTag to store state
v.setTag(newPressed);
final View vRun = v;
Runnable run = new Runnable() {
@Override
public void run() {
vRun.setPressed(newPressed);
}
};
mHandler.post(run);
// mHandler.postDelayed(run, 5);
}
});
如果您在其 onClick 方法中手動更改按鈕中的圖像,則當操作完成時,它可以為該按鈕設置正常圖像。 如果動作非常快,則更改將無法正確顯示 - 可能還需要延遲代碼。
我用過
NAME_OF_BUTTON.setImageResource(0xvalueofbutton_pressed image listed in R.java);
然后當操作終止時,我復制了代碼並插入了button_normal
的整數值。
我以前以不同的方式這樣做過,我找不到我的備份或我的代碼的硬拷貝。
再次感謝您的回復。
只需添加我的 2 美分作為另一種選擇。 您可以使用 setSelected(true),而不是 button.setPressed,一旦用戶松開按鈕,它就會失去選擇器的狀態。 只需確保在完成操作后返回 setSelected(false) 即可。
btn.setOnClickListener( view -> {
view.setSelected(true);
});
並添加可繪制選擇器作為按鈕的背景:
<item android:drawable="@drawable/btn_selected" android:state_selected="true"></item>
使用(buttonName).setPressed(true)
並確保為 drawable 保留了適當的 xml 文件,該文件定義了用於按下、聚焦等狀態的 drawable:
老問題,但這是我所做的,似乎比上述所有內容都簡單。 在按鈕的 onclick 中:
thisButton
.getBackground()
.setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
我的按鈕正在使用可繪制資源(不確定這是否重要),當用戶單擊一個時,我設置了我想要的顏色過濾器,它與我用於“按下”狀態的顏色相同,因此看起來它保持按下狀態。
要清除它,請使用:
thisButton.getBackground().clearColorFilter();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.