2012-11-04 39 views
34

Câu hỏi: Tôi có thể tìm kiểu xml mặc định bằng mã màu thập lục phân ở đâu?Android - kiểu nút mặc định

Tôi đang tìm cho Style 'buttonStyle' và phong cách mặc định khác phù thủy ảnh hưởng đến các khía cạnh như TextView, Buttons vv (nếu bạn không thay đổi phong cách của khía cạnh)

Tôi nhìn lên trong <instalation_folder>\android-sdk\platforms\android-<versio>\data\res\values<instalation_folder>\android-sdk\platforms\android-<version>\data\res\colors nhưng tôi didn' t thực sự tìm thấy những gì tôi đang tìm kiếm.

Hy vọng câu hỏi của tôi là rõ ràng.


Do danh tiếng thấp Tôi chưa thể trả lời câu hỏi này. Dưới đây là trả lời

trả lời

Với một chút googling tôi thấy 'buttonStyle' thực sự 'Widget.Button' - Styling Android With Defaults

Đây là cách hoạt động:

  • Như tôi đã nói phong cách 'buttonStyle' là phong cách 'Widget.Button' accualy được định nghĩa trong \android-sdk\platforms\android-<version>\data\res\values\styles.xml. Nền được đặt thành: @android:drawable/btn_default
  • \android-sdk\platforms\android-<version>\data\res\drawable\btn_default.xml xác định màu nền của nút làm bộ chọn. Màu sắc thực sự phụ thuộc vào trạng thái của nút. Mặc định màu sắc được thiết lập để @drawable/btn_default_normal
  • Với một chút tìm kiếm tôi tìm thấy, btn_default_normal được png nằm ở \android-sdk\platforms\android-<version>\data\res\drawable-mdpi

Tôi tìm thấy nó một chút bối rối, nhưng tôi hy vọng nó sẽ giúp ai đó, có lẽ ...

Trả lời

113

Hiểu cách kiểu Android hoạt động có thể hơi lộn xộn một chút.

Tôi sẽ cố gắng giải thích cách luồng công việc cơ bản sẽ như thế nào, dựa trên ví dụ.

Giả sử bạn muốn biết nền mặc định cho các nút là gì. Điều này có thể là một màu đơn giản (không chắc) hoặc có thể vẽ được (có nhiều loại hình có thể rút khác nhau).

Android có Chủ đề. Một chủ đề về cơ bản xác định kiểu nào được áp dụng cho tiện ích con nào. Vì vậy, bước đầu tiên của chúng tôi là tìm chủ đề android mặc định.

Bạn tìm thấy nó dưới android-sdk\platforms\android-15\data\res\values\themes.xml

Trong file theme này, tìm kiếm button.

Bạn sẽ tìm thấy một cái gì đó như thế này:

<!-- Button styles --> 

<item name="buttonStyle">@android:style/Widget.Button</item> 

Điều này có nghĩa rằng các chủ đề áp dụng phong cách Widget.Button để nút.

Ok, giờ hãy tìm kiểu Widget.Button.

Tất cả các mặc định phong cách Android được định nghĩa trong file android-sdk\platforms\android-15\data\res\values\styles.xml

Bây giờ tìm kiếm Widget.Button

Bạn sẽ tìm thấy một cái gì đó như thế này:

<style name="Widget.Button"> 
    <item name="android:background">@android:drawable/btn_default</item> 
    <item name="android:focusable">true</item> 
    <item name="android:clickable">true</item> 
    <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> 
    <item name="android:textColor">@android:color/primary_text_light</item> 
    <item name="android:gravity">center_vertical|center_horizontal</item> 
</style> 

Dòng thú vị là:

<item name="android:background">@android:drawable/btn_default</item>

Điều này có nghĩa là có thể vẽ được btn_default làm nền nút.

Bây giờ, chúng tôi cần tìm một tệp có tên btn_default.* trong một trong các thư mục có thể kéo theo android-sdk\platforms\android-15\data\res.

Đây có thể là hình ảnh (rất khó xảy ra) hoặc tệp xml như btn_default.xml.

Sau một chút tìm kiếm bạn sẽ tìm thấy các tập tin android-sdk\platforms\android-15\data\res\drawable\btn_default.xml

Nó chứa một cái gì đó như thế này:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/btn_default_normal_disable" /> 
    <item android:state_pressed="true" android:drawable="@drawable/btn_default_pressed" /> 
    <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_default_selected" /> 
    <item android:state_enabled="true" android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_focused="true" android:drawable="@drawable/btn_default_normal_disable_focused" /> 
    <item android:drawable="@drawable/btn_default_normal_disable" /> 
</selector> 

Bây giờ bạn phải hiểu rằng đây là một drawable selector (một trong nhiều loại drawable). Bộ chọn này chọn các hình nền khác nhau, dựa trên trạng thái nút. Ví dụ, nếu các nút được nhấn, nó có một nền khác.

Không xem xét trạng thái mặc định.

<item android:state_enabled="true" android:drawable="@drawable/btn_default_normal" />

Nó áp dụng đối tượng vẽ được gọi là btn_default_normal.

Bây giờ chúng ta cần phải tìm thấy điều này có thể vẽ được.

Một lần nữa, chúng tôi cần tìm một tệp có tên btn_default_normal.* trong một trong các thư mục có thể kéo theo android-sdk\platforms\android-15\data\res.

Đây có thể là hình ảnh hoặc tệp xml như btn_default_normal.xml.

Bạn sẽ tìm thấy nhiều tệp có tên 'btn_default_normal.9.png' trong các thư mục có thể vẽ khác nhau cho các độ phân giải khác nhau.

:) Bây giờ bạn biết rằng btn_default_normal.9.png được đặt làm nền nút.

+1

Cảm ơn !! rất tốt giải thích. – Zombie

+6

Wow, đó là một câu trả lời tuyệt vời :) – theapache64

6

Bạn có thể tìm thấy phong cách mặc định của widget android khi bạn khai báo trong XML:

style="@android:style/Widget.Button" - standard Button 
style="@android:style/Widget.TextView" - standard TextView 

Ví dụ đây là phong cách của nút mặc định:

<style name="Widget.Button"> 
     <item name="android:background">@android:drawable/btn_default</item> 
     <item name="android:focusable">true</item> 
     <item name="android:clickable">true</item> 
     <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> 
     <item name="android:textColor">@android:color/primary_text_light</item> 
     <item name="android:gravity">center_vertical|center_horizontal</item> 
    </style> 

nền của nút mặc định:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/btn_default_normal" android:state_enabled="true" android:state_window_focused="false"/> 
    <item android:drawable="@drawable/btn_default_normal_disable" android:state_enabled="false" android:state_window_focused="false"/> 
    <item android:drawable="@drawable/btn_default_pressed" android:state_pressed="true"/> 
    <item android:drawable="@drawable/btn_default_selected" android:state_enabled="true" android:state_focused="true"/> 
    <item android:drawable="@drawable/btn_default_normal" android:state_enabled="true"/> 
    <item android:drawable="@drawable/btn_default_normal_disable_focused" android:state_focused="true"/> 
    <item android:drawable="@drawable/btn_default_normal_disable"/> 
</selector> 

Bạn có thể nhận được màu mặc định với sự trợ giúp của trình chỉnh sửa đồ họa y: đường dẫn đến nút mặc định NinePatch .. \ android-sdk \ platforms \ android-13 \ dữ liệu \ res \ drawable-hdpi

+1

làm thế nào để làm điều này cho lib Appcompat? android: Widget.Button đến @ style/Widget.AppCompat.Button cũng không hoạt động !! –

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