У меня есть кнопка, как показано ниже. Когда я хочу отключить его, я использую my_btn.setEnabled(false)
, но я также хотел бы выделить его серым цветом. Как я могу это сделать?
Спасибо
<Button android:id="@+id/buy_btn" style="@style/srp_button" />
стиль / srp_button
<style name="srp_button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_default</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">14sp</item>
<item name="android:typeface">serif</item>
<item name="android:paddingLeft">30dp</item>
<item name="android:paddingRight">30dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
</style>
вытяжка / btn_default.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/pink" />
<corners android:radius="6dp" />
</shape>
Ответы:
Вы должны указать 3 или 4 состояния в своем
btn_defaut.xml
селекторе.Вы соответственно создадите эффект и фон для состояний.
Вот подробное обсуждение: Стандартная кнопка Android с другим цветом
источник
android:state_disable="true"
будет показывать состояние, когда кнопка отключена, простой и рекомендуемый способ.android:state_disable="true"
ли? Вы имеете в видуandroid:state_enabled="false"
?Вы также можете сделать его отключенным, установив альфа-канал (сделав его полупрозрачным). Это особенно полезно, если фон вашей кнопки является изображением, и вы не хотите создавать для него состояния.
обновление: я написал вышеупомянутое решение до Kotlin и когда я был новичком. Это больше похоже на «быстрое и грязное» решение, но я не рекомендую его в профессиональной среде.
Сегодня, если бы мне нужно было универсальное решение, которое работало бы с любой кнопкой / представлением без необходимости создавать список состояний, я бы создал расширение Kotlin.
В Java вы можете сделать что-то подобное со статической функцией util, и вам просто нужно будет передать представление как переменную. Это не так чисто, но работает.
источник
View
. Из этого сообщения G + : «Если ваше представление не содержит перекрывающихся команд рисования,setAlpha()
оно оптимизировано, и мы просто изменяем объекты Paint, чтобы применить правильную альфа-канал. Это происходит, когдаView.hasOverlappingRendering()
возвращается true.ImageView
S иTextView
s без возможности рисования фона являются общими кандидатами на это оптимизация. Если вы попали в такую ситуацию, используйтеsetAlpha()
столько, сколько хотите. ».Самое простое решение - установить цветовой фильтр на фоновое изображение кнопки, как я видел здесь.
Вы можете сделать следующее:
Надеюсь, я кому-то помог ...
источник
Mode.SRC_IN
следует использовать вместо Multiply. См. Stackoverflow.com/a/17112876/550471Все предоставленные ответы работают нормально, но я помню, как узнал, что использование setAlpha может быть плохой идеей с точки зрения производительности (подробнее здесь ). Поэтому создание StateListDrawable - лучшая идея для управления отключенным состоянием кнопок. Вот как:
Создайте XML btn_blue.xml в папке res / drawable:
Создайте стиль кнопки в res / values / styles.xml
Затем примените этот стиль к своей кнопке:
Теперь, когда вы вызываете
btnBlue.setEnabled(true)
ИЛИ,btnBlue.setEnabled(false)
цвета состояния будут автоматически переключаться.источник
Вы должны создать XML-файл для отключенной кнопки ( drawable / btn_disable.xml )
И создайте селектор для кнопки ( drawable / btn_selector.xml )
Добавьте селектор на свою кнопку
источник
Установите Clickable как false и измените цвет фона как:
источник
источник
Я использовал для этого этот код:
источник
Я пробовал вышеуказанные решения, но ни одно из них не помогло мне. Я выбрал следующий вариант:
источник