2012-01-12 37 views
14

Tôi đang tìm kiếm một tài khoản để điều chỉnh màu văn bản của tiện ích con trong một ứng dụng tổ ong android. Tôi biết rằng các widget vốn có màu văn bản toàn cầu đó là màu trắng trong trường hợp của tôi, nhưng tôi cần một màu văn bản màu đen cho datepicker như nền ở đây là ánh sáng màu xám.Android HoneyComb DatePicker Màu văn bản

Bất kỳ ai biết cách sửa lỗi này?

Trả lời

2

Xin chào :) Có tiện ích EditText ở đâu đó trong tiện ích con ngày tháng. Bạn chỉ cần tìm nó. Bạn có thể làm điều này bằng cách sử dụng một số mã hóa sáng tạo và bắt đầu tìm kiếm thông qua childrens của widget datepicker sử dụng các phương thức như getChildAt (index) và getChildCount() và sau đó lặp qua nó.

Bạn cũng có thể làm điều gì đó như thế này, nhưng tôi không chắc chắn rằng nó sẽ làm việc trên tất cả các thiết bị, vòng tốt hơn thông qua datepickers trẻ em:

DatePicker picker; 
ViewGroup childpicker; 

childpicker = (ViewGroup) findViewById(Resources.getSystem().getIdentifier("month" /*rest is: day, year*/, "id", "android")); 

EditText textview = (EditText) picker.findViewById(Resources.getSystem().getIdentifier("timepicker_input", "id", "android")); 

textview.setTextColor(Color.GREEN); 

Tôi hy vọng điều này sẽ giúp :)

+2

nơi u sử dụng conpicker ở đây? –

1

Hmm Tôi đã làm như sau:

private void hackDatePickerTextColorToBlack(){ 
    setTextColorBlack(datePicker); 
} 

private static void setTextColorBlack(ViewGroup v) { 
    int count = v.getChildCount(); 
    for (int i = 0; i < count; i++) { 
     View c = v.getChildAt(i); 
     if(c instanceof ViewGroup){ 
      setTextColorBlack((ViewGroup) c); 
     } else 
     if(c instanceof TextView){ 
      ((TextView) c).setTextColor(Color.BLACK); 
     } 
    } 
} 

Điều này thay đổi màu chữ thành đen nhưng cẩn thận khi đệ quy quá trình này có thể mất chút thời gian.

Ngoài ra khi bộ chọn ngày được sử dụng, văn bản sẽ chuyển sang màu trắng để hút!

FYI đây là nguồn cho DatePicker: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml

Các EditTexts là NumberPickers

27

thực hiện nó

lại làm điều đó trong một chủ đề trong styles.xml ứng dụng (về cơ bản thiết lập một phong cách trên tất cả Trường EditText)

Tôi có điều này trong/values-v11/vì vậy nó chỉ ảnh hưởng> HC

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

    <style name="Theme.SelectDate" parent="@android:style/Theme.Holo.NoActionBar"> 
     <item name="android:editTextStyle">@style/Widget.EditText.Black</item> 
    </style> 

    <style name="Widget.EditText.Black" parent="@android:style/Widget.EditText"> 
     <item name="android:textColor">@color/black</item> 
    </style> 

</resources> 

Sau đó, trong AndroidManifest tôi, cho Hoạt động sử dụng các DatePicker:

 <activity 
      android:name=".ui.phone.SelectDateActivity" 
      android:label="Date Selection" 
      android:screenOrientation="portrait" 
      android:theme="@style/Theme.SelectDate" /> 

Vậy là xong!


My Working Out:

tôi đi đến kết luận này bằng cách kiểm tra nguồn DatePicker:

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml

Đó chỉ cho tôi những DatePicker sử dụng NumberPicker

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker.xml https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker_with_selector_wheel.xml

Các NumberPicker sử dụng một EditText

Bạn do đó có thể tạo kiểu một EditText

android : how to change the style of edit text?

Và nếu bạn tìm kiếm trong tập tin này cho "EditText" bạn sẽ thấy bạn có thể đặt một phong cách trên tất cả các trường edittext trong một Hoạt động!

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml

Bạn ghi đè mục này:

<item name="editTextStyle">@android:style/Widget.EditText</item> 
+0

cảm ơn bạn, đã làm việc cho tôi. –

+0

Câu trả lời hay! Tôi khuyên bạn nên sử dụng AppBaseTheme làm cha mẹ của Theme.SelectDate, để nó cũng hoạt động với các API thấp hơn. –

6

Tôi đã tìm thấy giải pháp này: gỡ lỗi đối tượng DatePicker, tôi nhận được jerarqy đối tượng. Có lẽ nó không phải là một giải pháp thanh lịch nhưng nó hoạt động:

private void setNumberPickerProperties(DatePicker dp) 
{ 
     LinearLayout l = (LinearLayout)dp.getChildAt(0); 
     if(l!=null) 
     { 
       l = (LinearLayout)l.getChildAt(0); 
       if(l!=null) 
       { 
         for(int i=0;i<3;i++) 
         { 
           NumberPicker np = (NumberPicker)l.getChildAt(i); 
           if(np!=null) 
           { 
             EditText et = (EditText)np.getChildAt(1); 
             et.setTextColor(Color.BLACK); 
           } 
         } 
       } 
     } 
} 
0

Tôi đã có một vấn đề tương tự, mặc dù tôi đã tìm cách để thay đổi kích thước văn bản, nhưng đó là một chi tiết nhỏ. Tôi đã sử dụng quy trình tương tự để tách phân cấp Chế độ xem và thay đổi kích thước phông chữ. Tuy nhiên, mỗi tháng một lần (hoặc ngày hoặc năm) đã được thay đổi, phông chữ đã thay đổi về giá trị ban đầu. Tuyệt vời để xem, xấu để chỉnh sửa. Tôi đã thực hiện bước tiếp theo và thêm một người nghe thay đổi. Bây giờ khi giá trị được thay đổi, nó bật trở lại kích thước phông chữ ưa thích:

public void setFontSize(final int size) { 

    LinearLayout l = (LinearLayout) mPicker.getChildAt(0); 
    if (l != null) { 
     l = (LinearLayout) l.getChildAt(0); 
     if (l != null) { 
      for (int i = 0; i < 3; i++) { 
       NumberPicker np = (NumberPicker) l.getChildAt(i); 
       for (int x = 0; x < np.getChildCount(); x++) { 
        View view = np.getChildAt(x); 
        if ((view != null) && (view instanceof TextView)) { 
         final TextView tv = (TextView) view; 
         tv.setTextSize(size); 
         tv.setOnEditorActionListener(new OnEditorActionListener() { 

          public boolean onEditorAction(TextView v, 
            int actionId, KeyEvent event) { 
           tv.setTextSize(size); 
           return false; 
          } 
         }); 
        } 
       } 
      } 
     } 
    } 

} 
-1

Chức năng setTextColorBlack() chỉ hoạt động một lần. Nếu tôi cuộn datepicker thì tất cả các textviews sẽ trở thành màu mặc định, cho đến khi tôi tab vào một ngày cụ thể hoặc tháng hoặc năm.

+1

Mặc dù _answer_ của bạn không chứa dấu chấm hỏi, nó có vẻ là một _question_ liên quan đến việc giải quyết câu trả lời khác. Vui lòng không đăng câu hỏi dưới dạng câu trả lời. – Bowdzone

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