Mam przycisk zdefiniowany, jak pokazano poniżej. Kiedy chcę go wyłączyć, używam my_btn.setEnabled(false)
, ale chciałbym też to wyszarzać. Jak mogę to zrobić?
Dzięki
<Button android:id="@+id/buy_btn" style="@style/srp_button" />
style / 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>
do rysowania / 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>
Odpowiedzi:
btn_defaut.xml
Jako selektor musisz podać 3 lub 4 stany .Zapewnisz odpowiednio efekt i tło dla stanów.
Oto szczegółowe omówienie: Standardowy przycisk Androida w innym kolorze
źródło
android:state_disable="true"
, pokaże stan, gdy przycisk jest wyłączony, w łatwy i zalecany sposób.android:state_disable="true"
, prawda? Czy masz na myśliandroid:state_enabled="false"
?Możesz również sprawić, że będzie wyglądał jako wyłączony, ustawiając alfa (dzięki czemu będzie półprzezroczysty). Jest to szczególnie przydatne, jeśli tłem przycisku jest obraz i nie chcesz tworzyć dla niego stanów.
aktualizacja: powyższe rozwiązanie napisałem przed Kotlinem i jako debiutant. Jest to bardziej „szybkie i brudne” rozwiązanie, ale nie polecam go w środowisku zawodowym.
Dzisiaj, gdybym chciał mieć ogólne rozwiązanie działające na dowolnym przycisku / widoku bez konieczności tworzenia listy stanów, stworzyłbym rozszerzenie Kotlin.
W Javie możesz zrobić coś podobnego za pomocą statycznej funkcji util i po prostu musisz przekazać widok jako zmienną. Nie jest tak czysty, ale działa.
źródło
View
. Od tego postu G + : „Jeśli Państwa zdaniem nie zawierają nakładających polecenia rysowania,setAlpha()
jest zoptymalizowany z dala, a my po prostu zmodyfikować malowania obiektów w celu zastosowania odpowiedniej alfa Dzieje się tak kiedy.View.hasOverlappingRendering()
Zwraca true.ImageView
S iTextView
s bez tła rozciągliwej są wspólne kandydatami do tego optymalizacji. Jeśli jesteś w takiej sytuacji, użyjsetAlpha()
tyle, ile chcesz. ”.Najłatwiejszym rozwiązaniem jest ustawienie filtru kolorów na obrazie tła przycisku, jak widziałem tutaj
Możesz wykonać następujące czynności:
Mam nadzieję, że komuś pomogłem ...
źródło
Mode.SRC_IN
należy użyć zamiast funkcji Mnożenie. Zobacz stackoverflow.com/a/17112876/550471Wszystkie podane odpowiedzi działają dobrze, ale pamiętam, że nauczyłem się, że użycie setAlpha może być złym pomysłem pod względem wydajności (więcej informacji tutaj ). Dlatego utworzenie StateListDrawable jest lepszym pomysłem do zarządzania wyłączonymi stanami przycisków. Oto jak:
Utwórz plik XML btn_blue.xml w folderze res / drawable:
Utwórz styl przycisku w res / values / styles.xml
Następnie zastosuj ten styl do swojego przycisku:
Teraz, gdy zadzwonisz do
btnBlue.setEnabled(true)
LUB,btnBlue.setEnabled(false)
kolory stanu zostaną automatycznie przełączone.źródło
Powinieneś utworzyć plik XML dla wyłączonego przycisku ( drawable / btn_disable.xml )
I utwórz selektor dla przycisku ( drawable / btn_selector.xml )
Dodaj selektor do swojego przycisku
źródło
Ustaw klikalne jako fałsz i zmień kolor tła na:
źródło
źródło
Użyłem do tego tego kodu:
źródło
Wypróbowałem powyższe rozwiązania, ale żadne z nich nie wydawało mi się skuteczne. Poszedłem z następującą opcją:
źródło