Android. Как сохранить кнопку, отображаемую как PRESSED, до тех пор, пока действие, созданное этой кнопкой, не будет завершено?

У меня есть button_focused, button_pressed и button_normal изображения. Когда я нажимаю кнопку, отображается изображение button_pressed и начинается действие, связанное с нажатием кнопки.

Когда я перестаю нажимать кнопку, действие продолжается, но кнопка возвращается к отображаемому изображению button_normal.

Как установить изображение кнопки на button_pressed во время всего действия, а затем reset на button_normal изображение?

Спасибо за ваше время

+4
источник поделиться
6 ответов

Я использовал такую ​​функцию, как

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; вместо этого он меняет фон, чтобы кнопка выглядела нажатой.

+3
источник

Если вы измените изображение в кнопке вручную в методе onClick, тогда при завершении действия оно может установить нормальное изображение для этой кнопки. Если действие очень быстрое, изменение не будет отображаться должным образом - может потребоваться также код задержки.

+1
источник
другие ответы

Связанные вопросы


Похожие вопросы

Я использовал

NAME_OF_BUTTON.setImageResource(0xvalueofbutton_pressed image listed in R.java);

то, когда действие завершается, я скопировал код и ввел целочисленное значение button_normal.

Я сделал это по-другому раньше, и я не могу найти свои резервные копии или печатные копии моего кода.

Еще раз спасибо за ваши ответы.

+1
источник

Используйте (buttonName).setPressed(true)

И убедитесь, что вы сохранили соответствующий xml файл для drawable, который определяет, какой drawable использовать для состояний, таких как нажатые, сфокусированные и т.д.:

+1
источник

Чтобы сделать его более понятным, если вам просто нужна кнопка с двумя состояниями:

Вам не нужен ваш button.xml. Вы можете работать с обычным Android.

button.setPressed(true) не будет работать, если вы нажмете кнопку, потому что Android будет reset после того, как вы отпустите кнопку. Попробуйте установить другие кнопки setPressed сначала, чтобы увидеть эффект.

Это означает, что для его использования на одной и той же кнопке необходимо установить задержку. Вот рабочий пример. Конечно, упомянутый подход (длинный 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);
        }
    });
+1
источник

Просто добавив свои 2 цента в качестве другой альтернативы. Вместо button.setPressed, который потеряет состояние из селектора, как только пользователь отпустит кнопку, вы можете использовать setSelected (true). Просто убедитесь, что вернитесь с помощью setSelected (false), когда вы закончите действие.

        btn.setOnClickListener( view ->  {
        view.setSelected(true);
    });

И добавьте рисованный селектор в качестве фона для кнопки:

<item android:drawable="@drawable/btn_selected" android:state_selected="true"></item>
+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос