2013-08-29 29 views
21

Tôi đã đặt chủ đề mặc định cho toàn bộ ứng dụng. Nó được định nghĩa trong styles.xml như sau:Cách đặt chủ đề khác cho Bố cục

<style name="DefaultTheme" parent="@android:style/Theme.Holo.Light"> 
     <!-- Customization here --> 
    </style> 

Tôi cũng đã xác định một chủ đề tối:

<style name="DarkTheme" parent="@android:style/Theme.Holo"> 
     <!-- Customization here --> 
    </style> 

Trong manifest nó được khai báo với chủ đề ánh sáng làm chủ đề chính cho các ứng dụng:

<application 
    ... 
    android:theme="@style/DefaultTheme" > 

Bây giờ việc này hoạt động tốt, nhưng trong một hoạt động, tôi cần đặt chủ đề khác cho một Bố cục duy nhất. Một cái gì đó như thế này:

+--------------------------------------------------+ 
    |   Parent Linear layout (default theme)  | 
    |             | 
    | +------------------------------------+ +-------+ | 
    | |         | |  | | 
    | |  Left linear layout    | |  | | 
    | |  (default theme)    | |  | | 
    | |         | |  | | 
    | |         | |  | | 
    | |         | | ·<----------- Right Linear Layout 
    | |         | |  | |  (Need it in dark theme) 
    | |         | |  | | 
    | |         | |  | | 
    | +------------------------------------+ +-------+ | 
    +--------------------------------------------------+ 

Trong file layout xml Tôi đang cố gắng để thiết lập một chủ đề cho các con ngoài cùng bên phải LinearLayout:

<LinearLayout 
    style="@style/DarkTheme"> 
    ... 

tôi mong đợi này chỉ làm việc tốt, và áp dụng chủ đề tối đến bố cục đúng chỉ (và chế độ xem con của nó), nhưng nó không hoạt động. Tôi đã thử thay thế @ kiểu với một @android được xây dựng trong: phong cách không có avail. Tôi đã thử nghiệm điều này trong trình soạn thảo bố cục và trên thiết bị thực/mô phỏng.

Có thể áp dụng chủ đề hoặc kiểu tùy chỉnh cho một bố cục không?

+0

Tôi biết nó là câu hỏi cũ, được bạn có thể tìm thấy câu trả lời cho nó? –

Trả lời

20

Điều này bây giờ có thể bằng cách sử dụng thuộc tính android:theme trên chế độ xem và đặt nó vào bất kỳ chủ đề nào bạn thích. Lưu ý rằng các khung nhìn con sẽ kế thừa chủ đề của cha mẹ chúng.

+1

Kể từ Android Marshmallow –

12

AFAIK bạn không thể áp dụng chủ đề cho bố cục bằng XML.

Tuy nhiên, bạn có thể sử dụng ContextThemeWrapper() để áp dụng chủ đề khi tạo bố cục theo chương trình.

LinearLayout darkThemeLayout = new LinearLayout(new ContextThemeWrapper(context, R.style.DarkTheme)); 
5

Với thư viện hỗ trợ bạn có thể làm:

app:theme="R.style.MyTheme" 
Các vấn đề liên quan