簡體   English   中英

安卓。 在該按鈕創建的操作完成之前,如何保持按鈕顯示為 PRESSED?

[英]Android. How do I keep a button displayed as PRESSED until the action created by that button is finished?

我有button_focusedbutton_pressedbutton_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM