36

Tôi muốn sử dụng Material Theme trong ứng dụng của mình có phiên bản sdk tối thiểu là 8. Theo tài liệu - "Chủ đề tài liệu chỉ khả dụng trong Android 5.0 (API cấp 21) trở lên. Thư viện hỗ trợ v7 cung cấp các chủ đề với kiểu thiết kế material design cho một số widget và hỗ trợ tùy biến bảng màu. " Nó có nghĩa là tôi có thể sử dụng nó nếu tôi thêm Hỗ trợ L7ary v7 trong dự án của tôi? Bởi vì sau khi thêm thư viện này, tôi nhận được lỗi sau:android: Theme.Material.Light yêu cầu cấp API 21 (min hiện tại là 8)

android:Theme.Material.Light requires API level 21 (current min is 8).

Hoặc có thể tôi đã hiểu điều gì đó sai? Bất kỳ đề xuất nào cũng sẽ được đánh giá cao. Cảm ơn trước.

+1

Trên trang đó, họ nói để xem [trang này] (https://developer.android.com/training/ vật liệu/khả năng tương thích.html) cho bạn biết Theme.AppCompat nào bạn có thể sử dụng. –

+0

Hỗ trợ yaa lib hỗ trợ phiên bản 8 nhưng bạn phải biên dịch với 21 –

+0

@JeremyMiller Cảm ơn bạn đã liên kết tôi đã bỏ lỡ nó. – PPD

Trả lời

40

Đối với điều này, bạn cần phải có 2 thư mục giá trị.

Trình duyệt mặc định tồn tại và một thư mục khác, bạn phải tạo trong thư mục res và đặt tên là values-v21.

Trong thư mục giá trị mặc định, trong styles.xml, sử dụng chủ đề khác ngoài chủ đề Material Và trong tệp styles.xml của thư mục values-v21 mà bạn đã tạo, hãy sử dụng chủ đề Material.

Điện thoại Android sẽ tự động tải tệp styles.xml mà nó hỗ trợ. Nếu điện thoại hỗ trợ Material Design (thiết bị Lollipop), ứng dụng của bạn sẽ sử dụng chủ đề material (thư mục giá trị-21).

nếu nó không (trong điện thoại chạy phiên bản Android cũ hơn), thư mục giá trị mặc định sẽ được sử dụng.

+0

cũng sẽ phải tạo một Strings.xml giống hệt nhau? dường như abit dư thừa? –

33

Bạn cần sử dụng chủ đề android:theme="@style/Theme.AppCompat.Light" để nhận thiết kế material design.

đảm bảo tối thiểu của bạn là 8 và mục tiêu của bạn là 21. Và bạn đang sử dụng công cụ xây dựng/sdk 21.

+0

Tôi nghĩ tôi thích câu trả lời này hơn câu trả lời được chấp nhận. – Rishabh

23

Pedro Oliveira is right liên quan đến Theme.AppCompat, nhưng một số thông tin cần thiết là mất tích trong câu trả lời đó.

Một bài viết trên blog có tựa đề appcompat v21: material design for pre-Lollipop devices! Chris Banes từ nhóm Android có lẽ câu trả lời tốt nhất các câu hỏi về cách để có được Material Theme cho các cấp API trước 21.

Để tóm tắt, bạn cần appcompat-v7 dependency:

dependencies { 
    ... 
    compile "com.android.support:appcompat-v7:21.0.3" 
} 

Sau đó, đối với phiên bản đen tối như chủ đề cơ sở của bạn, sử dụng:

<style name="AppTheme" parent="Theme.AppCompat"> 
</style> 

Và đối với phiên bản ánh sáng:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
</style> 

Và nếu bạn là người mới đến AppCompat, có những điều bạn cần phải biết, chẳng hạn như:

All of your Activities must extend from ActionBarActivity*. It extends from FragmentActivity from the v4 support library, so you can continue to use fragments.

* NB: Gần đây hơn, ActionBarActivity đã bị phản đối ủng hộ AppCompatActivity.

Nhưng bạn thực sự nên đọc toàn bộ phần Thiết lập của bài đăng trên blog đó! (Thông tin trên Thanh công cụ và Thanh tác vụ và some of the comments cũng là điều bạn có thể không nên bỏ lỡ.)

+0

Cảm ơn bạn đã thêm điều đó :) –

+0

Sử dụng Theme.AppCompat.Light.NoActionBar và mở rộng từ android.support.v4.app.FragmentActivity, nó hoạt động tốt. Tôi nghĩ rằng một khi bạn thêm ActionBar, yêu cầu mở rộng từ ActionBarActivity sẽ xuất hiện. –

+0

Vâng, từ ngữ tôi trích dẫn không phải là rõ ràng nhất. Nếu bạn không sử dụng Action Bar (hoặc Thanh công cụ dưới dạng Action Bar?), Thì ActionBarActivity là không cần thiết. – Jonik

Các vấn đề liên quan