7

Tôi có kiểu nút với nền màu xanh hoạt động tốt trong API 22, nhưng nút tương tự xuất hiện với màu xám đậm mà không có kiểu được áp dụng trong Android 4. Đây là kiểu của tôi:Kiểu nút hoạt động trong Android 5 nhưng không phải là 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> 

btn_blue.xml My

<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> 

và 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> 

Điều gì có thể lý do cho hành vi này và làm thế nào tôi có thể sửa lỗi này?

CHỈNH SỬA: Tính năng này không hoạt động với hỗ trợ v7: 22.2.0, nhưng hoạt động với v7: 21.0.3. Tôi đã không thay đổi bất cứ điều gì ngoài sự phụ thuộc và thay đổi AppCompatActivity thành ActionBarActivity.

Có thể đây là lỗi Android.

+2

hiển thị drawable/btn_blue nội dung –

+0

Có cơ hội bạn có các thư mục riêng biệt cho các phiên bản API, và phong cách này chỉ là một trong số chúng? – AdamMc331

+0

@ mcAdam331: Không, tôi chỉ có một tệp kiểu. – barq

Trả lời

9

Hãy thử buttonStyle thay vì android:buttonStyle, vì đây là AppCompat thuộc tính trước Lollipop, vì vậy nó nên được mà không có tiền tố android.

+1

Điều này sẽ được chấp nhận như là câu trả lời, cố định vấn đề của tôi! Cảm ơn. –

0

Tôi đã thấy một số bố cục nơi các thuộc tính được áp dụng hai lần, có và không có tiền tố Android. Bạn có thể thử điều này:

<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> 

Tôi hiện đang cố gắng tìm nơi tôi đã thấy trước đây và tại sao nó hoạt động. Hãy cho tôi biết nếu nó đã làm.

+0

Cảm ơn, tôi đã thử điều này, nhưng rất tiếc trên API 10 nền màu xám cho nút. – barq

+0

@barq Tôi đoán nó đáng để quay. Bạn có thể đăng nội dung btn_blue như Lucas được hỏi không? Vấn đề có thể ở đó, sau đó. – AdamMc331

+0

@barq Tôi đã tìm thấy những gì tôi đã nghĩ đến, nó liên quan đến thư viện hỗ trợ: http://stackoverflow.com/questions/18726865/custom-style-action-bar-not-working-in-android-4 Tôi sắp rời khỏi câu trả lời của tôi cho bây giờ, trong trường hợp tôi có thể chỉnh sửa và giúp bạn sau. – AdamMc331

0

Cố gắng sử dụng AppCompat:

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

Cảm ơn, nhưng điều này không hoạt động, thật không may. – barq

+0

Bạn đã đặt kiểu cho nút chưa? –

+0

Không, đây là kiểu nút chung cho ứng dụng nên không cần thiết. Nó hoạt động mà không làm điều đó trong Android 5. – barq

0

@ Michał Kisiel câu trả lời là chính xác "Hãy thử buttonStyle thay vì android:buttonStyle, vì đây là thuộc tính AppCompat trước Lollipop, vì vậy không nên có tiền tố Android". Tôi chỉ muốn thêm rằng nếu bạn ví dụ tạo một cái nhìn programatically bạn nên đặt android: buttonStyle và buttonStyle quá, mẫu:

<item name="android:buttonStyle">@style/OrangeButton</item> 
    <item name="buttonStyle">@style/OrangeButton</item> 
Các vấn đề liên quan