7

Ho uno stile di pulsante con uno sfondo blu che funziona perfettamente con l'API 22, ma lo stesso pulsante appare in grigio scuro senza lo stile applicato in Android 4. Questo è il mio stile:Stile pulsante funzionante in Android 5 ma non Android 4

<style name="MyApp.Plain" parent="Theme.AppCompat.NoActionBar"> 
     <item name="android:windowBackground">@drawable/background</item> 
     <item name="android:buttonStyle">@style/MyApp.Widget.Button</item> 
</style> 


    <style name="MyApp.Widget.Button" parent="@android:style/Widget.Button"> 
     <item name="android:background">@drawable/btn_blue</item> 
     <item name="android:focusable">true</item> 
     <item name="android:clickable">true</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">14sp</item> 
     <item name="android:textColor">#fff</item> 
     <item name="android:gravity">center_vertical|center_horizontal</item> 
    </style> 

mio btn_blue.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/btn_disabled" android:state_enabled="false"/> 
    <item android:drawable="@drawable/btn_pressed" android:state_enabled="true" android:state_pressed="true"/> 
    <item android:drawable="@drawable/btn_normal_blue" android:state_enabled="true"/> 

</selector> 

e btn_normal_blue.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <gradient 
     android:angle="90" 
     android:endColor="#368ac6" 
     android:startColor="#0e58a4" /> 

    <corners android:radius="20dp" /> 

</shape> 

Che cosa potrebbe essere il motivo di questo comportamento e come posso risolvere questo problema?

MODIFICA: non funziona con il supporto v7: 22.2.0, ma funziona con v7: 21.0.3. Non ho modificato nulla oltre alla dipendenza e ho modificato AppCompatActivity in ActionBarActivity.

Forse si tratta di un bug di Android.

+2

mostrano il contenuto disegnabili/btn_blue –

+0

C'è qualche possibilità hai cartelle separate per le versioni API e questo stile è solo in una di esse? – AdamMc331

+0

@ mcAdam331: No, ho solo un file di stili. – barq

risposta

9

Prova buttonStyle invece di android:buttonStyle, dal momento che questo è AppCompat attributo pre Lollipop, quindi dovrebbe essere senza prefisso di Android.

+1

Questo dovrebbe essere accettato come risposta, risolto il mio problema! Grazie. –

0

Ho visto alcuni layout in cui gli attributi vengono applicati due volte, con e senza il prefisso Android. Potete provare questo:

<style name="MyApp.Widget.Button" parent="@android:style/Widget.Button"> 
     <item name="android:background">@drawable/btn_blue</item> 
     <item name="background">@drawable/btn_blue</item> 
     <item name="android:focusable">true</item> 
     <item name="android:clickable">true</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">14sp</item> 
     <item name="android:textColor">#fff</item> 
     <item name="android:gravity">center_vertical|center_horizontal</item> 
</style> 

Attualmente sto cercando di trovare dove ho visto questo in precedenza, e perché ha funzionato. Fammi sapere se lo ha fatto.

+0

Grazie, l'ho provato, ma sfortunatamente su API 10 ancora sfondo grigio per il pulsante. – barq

+0

@barq Immagino che valga la pena provare. Puoi pubblicare i contenuti btn_blue come richiesto da Lucas? Il problema potrebbe essere lì, quindi. – AdamMc331

+0

@barq Ho trovato quello che stavo pensando, relativo alla libreria di supporto: http://stackoverflow.com/questions/18726865/custom-style-action-bar-not-working-in-android-4 Sto partendo la mia risposta per ora, nel caso io sia in grado di modificarlo e aiutarti dopo. – AdamMc331

0

Provare a usare AppCompat:

<style name="MyApp.Widget.Button" parent="Base.TextAppearance.AppCompat.Button"> 
    <item name="android:background">@drawable/btn_blue</item> 
     ... 
    </style> 
+0

Grazie, ma questo non ha funzionato, purtroppo. – barq

+0

Hai impostato lo stile sul pulsante? –

+0

No, è lo stile di pulsante generale per l'app, quindi non dovrebbe esserci bisogno. Funziona senza farlo in Android 5. – barq

0

@ Michał Kisiel la risposta è corretta "Prova buttonStyle anziché android:buttonStyle, poiché questo è l'attributo AppCompat pre Lollipop, quindi dovrebbe essere senza prefisso Android." Voglio solo aggiungere che se per esempio creare una vista programatically si dovrebbe mettere Android: ButtonStyle e ButtonStyle troppo, campione:

<item name="android:buttonStyle">@style/OrangeButton</item> 
    <item name="buttonStyle">@style/OrangeButton</item> 
Problemi correlati