2012-12-04 20 views
11

Tôi có một chủ đề được gọi là "greenhighlight" — chủ đề này được tạo bằng cách sử dụng Android Action Bar Style Generator và kế thừa từ chủ đề ActionBarSherlock mặc định. Chủ đề không làm gì ngoại trừ thay đổi điểm đánh dấu ở dưới cùng của ActionBar từ xanh dương sang xanh lục.Tôi cần ghi đè thuộc tính chủ đề nào để thay đổi màu đánh dấu màu xanh lam của hộp thoại?

Để theme mọi hoạt động của tôi, tôi chỉ làm:

<application android:theme="@style/Theme.greenhighlight"... 

này hoạt động khá tốt cho các hoạt động (lưu ý các điểm nhấn màu xanh lá cây trên dưới cùng của ActionBar):

themed Android activity

Tuy nhiên , Tôi gặp khó khăn khi họ đối thoại với các hoạt động của mình:

default theme Android list dialog

default theme Android progress dialog

của tôi "greenhighlight_Dialog" chủ đề được định nghĩa là:

<style name="greenhighlight_Dialog" parent="@style/Theme.Sherlock.Dialog"> 
    <item name="android:progressBarStyleHorizontal"> 
     @style/greenhighlight_ProgressBar 
    </item> 
</style> 

tôi kế thừa từ mặc định Sherlock theme thoại, và trọng thanh tiến trình sử dụng sự tiến bộ phong cách thanh theo định nghĩa của tôi tạo ra chủ đề "greenhighlight" — bạn có thể thấy thanh tiến trình là bóng màu xanh lá cây chính xác trong ảnh chụp màn hình ở trên.

Để sử dụng theme, tôi đang chạy đoạn mã sau:

ContextThemeWrapper ctw = 
    new ContextThemeWrapper(this, R.style.greenhighlight_Dialog); 
AlertDialog.Builder builder = new AlertDialog.Builder(ctw); 
... 
ProgressDialog pd = new ProgressDialog(this, R.style.greenhighlight_Dialog); 
... 

Vấn đề của tôi là tôi không có ý tưởng những gì thuộc tính tôi cần phải ghi đè. Tôi đã xem qua styles.xmlthemes.xml theo khuyến cáo của tài liệu Styles and Themes (ghi chú rằng "tham chiếu R.style, không được ghi lại đầy đủ và không mô tả kỹ lưỡng kiểu") — nhưng có rất nhiều kiểu được xác định trên Theme.Dialog và tôi không chắc chắn về cái nào tôi cần ghi đè để có được thay đổi mà tôi muốn.

Thuộc tính nào tôi cần ghi đè để hộp thoại có văn bản tiêu đề màu xanh lá cây, thanh đánh dấu màu xanh lá cây bên dưới tiêu đề và dấu kiểm màu xanh lục cho các mục danh sách đã chọn?

+0

Câu hỏi hay. Nhưng vui lòng đọc dòng này tại [ActionBarSherlock - Theming] (http://actionbarsherlock.com/theming.html): * Không có thêm các chủ đề của hộp thoại nữa. Nếu bạn cần một số tính năng nâng cao hơn của hộp thoại, chúng phải được tự thực hiện. * –

+1

@PareshMayani: vâng, tôi đã đọc dòng đó - đó là lý do tại sao tôi đang triển khai chủ đề hộp thoại của riêng mình. – George

Trả lời

23

Tôi đã đi đào xung quanh nguồn và bắt gặp tệp bố cục alert_dialog_holo.xml. Đây là quan điểm chia:

<View android:id="@+id/titleDivider" 
    android:layout_width="match_parent" 
    android:layout_height="2dip" 
    android:visibility="gone" 
    android:background="@android:color/holo_blue_light" /> 

Trong lớp AlertController, đó là tầm nhìn được thiết lập để VISIBLE nếu có một món quà tiêu đề. Vì màu sắc được mã hóa cứng, sẽ không có cách nào để ghi đè lên nó bằng thuộc tính style.

Đây là quan điểm tiêu đề:

<com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" 
    style="?android:attr/windowTitleStyle" 
    android:singleLine="true" 
    android:ellipsize="end" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Vì vậy, nó sử dụng windowTitleStyle.Phải mất rất nhiều đuổi theo, nhưng tôi cuối cùng đã tìm thấy phong cách sử dụng:

<style name="TextAppearance.Holo.DialogWindowTitle"> 
    <item name="android:textSize">22sp</item> 
    <item name="android:textColor">@android:color/holo_blue_light</item> 
</style> 

Tiếp nối phong cách cha mẹ trở lại, tôi đã có thể thay đổi màu sắc văn bản chỉ qua phong cách:

<style name="AppTheme" parent="@android:style/Theme.Holo"> 
    <item name="android:alertDialogTheme">@style/AlertDialogStyle</item> 
</style> 

<style name="AlertDialogStyle" parent="@android:style/Theme.Holo.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> 
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> 
    <item name="android:windowTitleStyle">@style/DialogWindowTitle</item> 
</style> 

<style name="DialogWindowTitle"> 
    <item name="android:maxLines">1</item> 
    <item name="android:scrollHorizontally">true</item> 
    <item name="android:textAppearance">@style/DialogWindowTitleAppearance</item> 
</style> 

<style name="DialogWindowTitleAppearance" parent="@android:style/TextAppearance.Holo.DialogWindowTitle"> 
    <item name="android:textColor">#00ff00</item> 
</style> 

Bây giờ cho ngăn chia, bạn không thể thay đổi nó theo kiểu, nhưng vì bạn biết id, bạn có thể mở rộng lớp AlertDialog và chặn nó khi nó tạo bố cục của nó (onCreate) và thay đổi màu của nó. Mặc dù điều này được xử lý trong lớp học riêng tư AlertController, vì vậy tôi không chắc chắn bạn sẽ có bao nhiêu may mắn. Tôi sẽ xem xét điều này nhiều hơn và quay lại nếu tôi nghĩ ra bất cứ điều gì.

+0

Hi jason cảm ơn bạn vì một công việc tuyệt vời như vậy .. Nó hoạt động tốt cho tất cả các công cụ khác như thay đổi màu văn bản tiêu đề và v.v ... nhưng khi tôi cố thay đổi chiều cao hoặc màu sắc của dải phân cách, nó được phản ánh trong chế độ xem. bạn có thể plz giải thích làm thế nào để làm điều đó .. cần giúp đỡ ... cảm ơn bạn ... – nilkash

+1

@ nilkash, Những gì tôi đã kết thúc làm để có được xung quanh này là không đặt tiêu đề và sử dụng một bố trí tin nhắn tùy chỉnh. Trong bố cục thư tùy chỉnh của tôi, tôi đã tạo dải phân cách của riêng mình khớp với chủ đề của tôi. –

+0

@pegisys cảm ơn bạn đã trả lời. Nhưng tôi không biết ghi đè lên màu sắc chia để phù hợp với ứng dụng của tôi họ .. Tôi đã làm rất nhiều thứ nhưng không thể làm điều đó. chủ yếu cho cửa sổ ngữ cảnh và hộp thoại. Tôi có thể thay đổi văn bản và nghe văn bản hoặc đặt tiêu đề tùy chỉnh cho ngữ cảnh nhưng vẫn không thể thay đổi màu của bộ chia đầu trang ... Cần trợ giúp của bạn Cảm ơn bạn ... – nilkash

2

Tôi tìm thấy một giải pháp để loại bỏ các dải phân cách: chỉ cần thêm dòng sau trong phong cách hộp thoại cảnh báo tùy chỉnh của bạn (vui lòng tham khảo AlertDialogStyle trong câu trả lời Jason Robinson):

<item name="android:divider">@null</item>" 

Sau đó, chia sẽ biến mất.

Nếu bạn vẫn muốn thêm bộ chia tùy chỉnh, bạn có thể thêm nó vào bố cục nội dung tùy chỉnh của mình.

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