Как оторвать кнопку?
У меня есть кнопка, как показано ниже. Когда я хочу отключить его, я использую 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>
Ответы
Ответ 1
Вы должны указать 3 или 4 состояния в btn_defaut.xml
как селектор.
- Нажатое состояние
- Состояние по умолчанию
- Состояние фокусировки
- Включено состояние (отключить состояние с ложной индикацией, см. комментарии)
Вы предоставите эффект и фон для состояний соответственно.
Вот подробное обсуждение: Стандартная кнопка Android с другим цветом
Ответ 2
Вы также можете сделать его отключенным, установив альфа (делая его полупрозрачным). Это особенно полезно, если фон кнопки представляет собой изображение, и вы не хотите создавать для него состояния.
button.setAlpha(.5f);
button.setClickable(false);
обновление: я написал это до Kotlin, и когда я был новичком, это больше похоже на быстрое и грязное решение, но я не рекомендую его в профессиональной среде.
Сегодня, если бы я хотел универсальное решение, которое работает на любой кнопке/представлении без необходимости создавать список состояний, я бы сделал это:
fun View.disable() {
getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
setClickable(false)
}
Ответ 3
Самое простое решение - установить цветной фильтр на фоновое изображение кнопки, как я увидел здесь
Вы можете сделать следующее:
if ('need to set button disable')
button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
button.getBackground().setColorFilter(null);
Надеюсь, я помог кому-то...
Ответ 4
Установите значение Clickable как false и измените цвет backgroung как:
callButton.setClickable(false);
callButton.setBackgroundColor(Color.parseColor("#808080"));
Ответ 5
Все заданные ответы работают нормально, но я помню, что изучение того, что использование setAlpha может быть плохая идея, является мудрым (подробнее здесь). Поэтому создание StateListDrawable - это лучшая идея для управления отключенным состоянием кнопок. Вот как:
Создайте XML btn_blue.xml в папке res/drawable:
<!-- Disable background -->
<item android:state_enabled="false"
android:color="@color/md_blue_200"/>
<!-- Enabled background -->
<item android:color="@color/md_blue_500"/>
Создайте стиль кнопки в res/values /styles.xml
<style name="BlueButton" parent="ThemeOverlay.AppCompat">
<item name="colorButtonNormal">@drawable/btn_blue</item>
<item name="android:textColor">@color/md_white_1000</item>
</style>
Затем примените этот стиль к своей кнопке:
<Button
android:id="@+id/my_disabled_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/BlueButton"/>
Теперь, когда вы вызываете btnBlue.setEnabled(true)
ИЛИ btnBlue.setEnabled(false)
, цвета состояния будут автоматически переключаться.
Ответ 6
Вам нужно создать файл XML для отключенной кнопки (drawable/btn_disable.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/grey" />
<corners android:radius="6dp" />
</shape>
И создайте селектор для кнопки (drawable/btn_selector.xml)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_disable" android:state_enabled="false"/>
<item android:drawable="@drawable/btn_default" android:state_enabled="true"/>
<item android:drawable="@drawable/btn_default" android:state_pressed="false" />
</selector>
Добавить селектор на кнопку
<style name="srp_button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_selector</item>
</style>
Ответ 7
Button button = (Button)findViewById(R.id.buy_btn);
button.setEnabled(false);
Ответ 8
Я использовал этот код для этого:
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
profilePicture.setColorFilter(filter);
Ответ 9
u может сделать серое изображение и вставить его в свой код и добавить его в свой код.
button.setBackgroundResource(R.drawable.grey);
простой, простой, но из-за использования картинки он получает немного больше места.