13

Generuję przycisk bez obramowania na płasko za pomocą biblioteki pomocy (23.0.1). Działa normalnie na Lollipop. Jednak na pre-Lollipop po naciśnięciu przycisku Jego kolor zmienia się na colorButtonNormal w kolorze, jak w zwykłym przycisku.Przycisk bez obramowania na pre-Lollipop z biblioteką pomocniczą

Nie sądzę, że to normalne zachowanie, a skupiony kolor powinien być szary jak na Lollipop.

Oto zrzut ekranu z Lollipop i Pre-lollipop.

pierwsze normalne zachowanie na Lollipop: obramowania przycisku w stanie normalnym i skupiony stan na Lollipop

enter image description here

nie jest normalne zachowanie na Pre-Lollipop (Pragnienie kolor szary jak powyżej, ale to nie jest) : obramowania przycisku w stanie normalnym i koncentruje się na stan Pre-lizak enter image description here

Motyw

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
//other stuff 
     <item name="colorButtonNormal">@color/orangeColor</item> 
     <item name="buttonBarButtonStyle">@style/BorderlessButtonStyle</item> 
</style> 

<style name="BorderlessButtonStyle" parent="Widget.AppCompat.Button.Borderless"> 
     <item name="android:textColor">@color/blueTextColor</item> 
</style> 

A teraz przycisk w układzie:

<Button 
      android:id="@+id/btnForgotPassword" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/forgot_your_password" 
      style="?attr/buttonBarButtonStyle" 
      /> 

Każdy sposób, aby to napisać używając AppCompat tematu i style bez dokonywania odrębnych kanału alfa.

+0

Tylko myśl, ale próbowałeś zmieniając ' @ kolor/orangeColor' na ' @ android: kolor/przezroczysty' w swoim RES/stylów. xml (Możesz zachować go w stylu v-21/style)? –

+0

@AdvaitS colorButtonNormal zmienia również backgroundTint zwykłego przycisku. – Sharj

Odpowiedz

22

obramowania Przycisk działa zarówno Poczty i wersji Pre lizak z Biblioteki Wsparcia ale istnieje niewielka różnica między ich onPressed CO lor.

Pre-Lollipop: Domyślnie kolor onPressed jest taki sam jak domyślny Zestaw kolorów przycisków za pomocą colorButtonNormal.

Lollipop: Domyślnie kolor onPressed jest jasnoszary, co jest idealne.

można dokonać bez obramowania Przycisk tak:

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Name" 
    style="@style/Widget.AppCompat.Button.Borderless"/> 

Teraz Jeśli chcesz mieć ten sam kolor onPressed na wszystkich wersjach następnie można ustawić colorControlHighlight w nowym tematem i ustawić ten motyw w przycisk.

<Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Name" 
     android:theme="@style/BorderlessButton" 
     style="@style/Widget.AppCompat.Button.Borderless"/> 

i tematem w swoim stylu:

<style name="BorderlessButton" parent="Theme.AppCompat.Light"> 
     <item name="colorControlHighlight">YOUR COLOR</item> 
</style> 

Updated: Można użyć atrybutu android:theme dla View ponieważ Android 5.0 Lollipop i AppCompat v22.1.0 (i wyższe).

+0

Jak ustawić "motyw" dla pojedynczego przycisku? Sądziłem, że Android pozwala ustawić tematy tylko dla grup przeglądarek i działań. –

+2

@AlexPetrenko Tak, możesz używać 'android: theme' w widoku od Androida 5 i AppCompat v22.1.0 (i wyżej) https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAH – Sharj

+0

To jest świetny link, powinienem był to wcześniej zobaczyć. Dzięki! –

0

Używasz zaimplementowanego w Androidzie stylu "buttonBarButtonStyle", ponieważ wywołujesz go przez ?atr - zamiast niego użyj style="@style/BorderlessButtonStyle.

Edit: Zamieść xml jak to jest, ale można go zmienić na poszukiwanego zachowania jak ten:

AppCompatButton button = (AppCompatButton) findViewById(R.id.btnForgotPassword); 

ColorStateList colorStateList = new ColorStateList(new int[][] {{0}}, new int[] {0xFF969696}); 
    //969696 is your wanted grey color, just change it 
button.setSupportBackgroundTintList(colorStateList); 
+0

Implementacja Androida to '? Attr/android: buttonBarButtonStyle' - Bez Androida jest to implementacja biblioteki wsparcia, która powinna działać na pre-Lollipop - Także w temacie' buttonBarButtonStyle' przesłonięcie z własnym textColor, który działa. Rzecz nie działa na kolor tła ostrości na pre-Lollipop. – Sharj

+0

OK przepraszam, moja zła. Ale programowo możesz dodać swoje pożądane zachowanie, zaktualizuję odpowiedź. – yennsarah

1

dlaczego martwisz się z niektórych rzeczy po prostu iść z tym i być wolne

<Button 
    android:id="@+id/btnForgotPassword" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/forgot_your_password" 
    android:background="@drawable/abc_btn_borderless_material" 
/> 

i teraz niedbały o api rzeczy

1

Dodanie style="?attr/borderlessButtonStyle" do Button działało dobrze dla mnie.