Как изменить цвет шрифта TimePicker - PullRequest
0 голосов
/ 09 мая 2018

Работая в приложении для Android, здесь у меня есть TimePicker с режимом вращения , и мой цвет фона макета черный. Поэтому я хочу изменить цвет TimePickerшрифт к белому [час, минута, AM / PM].

Я сослался и попробовал так много решений для этого из SO, но моя проблема ничего не решила.

Наконец-то янашел источник Изменить цвет текста NumberPicker

Я реализовал следующим образом

import java.lang.reflect.Field;

public class CheckOut extends Activity {

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_alarm);

 mTimePicker = (TimePicker) findViewById(R.id.mTimePicker);
int mycolor = getResources().getColor(R.color.tab_background);
 setTimePickerColor(mTimePicker,mycolor);

}

 public static boolean setTimePickerColor(TimePicker timePicker, int color)
    {
        final int count = timePicker.getChildCount();
        for(int i = 0; i < count; i++){
            View child = timePicker.getChildAt(i);
            if(child instanceof EditText){
                try{
                    Field selectorWheelPaintField = timePicker.getClass()
                            .getDeclaredField("mSelectorWheelPaint");
                    selectorWheelPaintField.setAccessible(true);
                    ((Paint)selectorWheelPaintField.get(timePicker)).setColor(color);
                    ((EditText)child).setTextColor(color);
                    timePicker.invalidate();
                    return true;
                }
                catch(NoSuchFieldException e){
                    Log.w("setNumberPickerTextColor", e);
                }
                catch(IllegalAccessException e){
                    Log.w("setNumberPickerTextColor", e);
                }
                catch(IllegalArgumentException e){
                    Log.w("setNumberPickerTextColor", e);
                }
            }
        }
        return false;
    }
}

Я не знаю, где я сделал ошибку, потому что это не таксделать любой эффект.

1 Ответ

0 голосов
/ 09 мая 2018

Проблемы и недостатки в использовании Android родной date and time picker.

  1. Настройка достаточно сложна , чтобы никогда не захотеть тратить часы на сборщик дат.
  2. Пользовательский интерфейс выбора даты и таймера может отличаться в pre lollipop и lollipop устройстве. (Я упоминаю это)

Решение

Я всегда использую библиотеку MaterialDateTimePicker , чтобы избавиться от этой проблемы. Эта библиотека с широкими возможностями настройки, хорошо поддерживается репо.

Я передаю вам свой код базового класса активности, который вы можете добавить в свой базовый класс активности или создать новый.

Вы расширите свой класс деятельности этим базовым классом. и просто вызовите простой метод, который я написал.

openTimeDialog(Calendar.getInstance(), new OnTimeSelected() {
            @Override
            public void onTimeSet(Calendar timeCalendar) {

            }
        });

BaseProject.java

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import java.util.Calendar;

/**
 * Created by KHEMRAJ on 8/1/2017.
 */

public class BaseProject extends Activity {

    public interface OnDateSelected {
        void onDateSet(Calendar dateCalendar);
    }

    public interface OnTimeSelected {
        void onTimeSet(Calendar timeCalendar);
    }

    public void openDateDialog(OnDateSelected onDateSelected) {
        openDateDialog(Calendar.getInstance(), null, null, onDateSelected);
    }

    public void openDateDialog(@NonNull Calendar preSelectedCalendar, final OnDateSelected onDateSelected) {
        openDateDialog(preSelectedCalendar, null, null, onDateSelected);
    }

    public void openDateDialog(@NonNull Calendar preSelectedCalendar, @Nullable Calendar minDateCalander, final OnDateSelected onDateSelected) {
        openDateDialog(preSelectedCalendar, minDateCalander, null, onDateSelected);
    }

    public void openDateDialog(@NonNull Calendar preSelectedCalendar, @Nullable Calendar minDateCalander, @Nullable Calendar maxDateCalander, final OnDateSelected onDateSelected) {
        DatePickerDialog dpd = DatePickerDialog.newInstance(
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
                        Calendar calendar = Calendar.getInstance();
                        calendar.set(Calendar.YEAR, year);
                        calendar.set(Calendar.MONTH, monthOfYear);
                        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        if (onDateSelected != null) onDateSelected.onDateSet(calendar);
                    }
                },
                preSelectedCalendar.get(Calendar.YEAR),
                preSelectedCalendar.get(Calendar.MONTH),
                preSelectedCalendar.get(Calendar.DAY_OF_MONTH)
        );
        if (minDateCalander != null)
            dpd.setMinDate(minDateCalander);
        if (maxDateCalander != null)
            dpd.setMaxDate(maxDateCalander);
        dpd.show(getFragmentManager(), "Datepickerdialog");
    }

    public void openTimeDialog(@NonNull Calendar preSelectedCalendar, final OnTimeSelected onTimeSelected) {
        TimePickerDialog timePickerDialog = TimePickerDialog.newInstance(
                new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
                        Calendar calendar = Calendar.getInstance();
                        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                        calendar.set(Calendar.MINUTE, minute);
                        calendar.set(Calendar.SECOND, second);
                        if (onTimeSelected != null) onTimeSelected.onTimeSet(calendar);
                    }
                },
                preSelectedCalendar.get(Calendar.HOUR_OF_DAY),
                preSelectedCalendar.get(Calendar.MINUTE),
                false);
        timePickerDialog.show(getFragmentManager(), "TimePickerDialog");
    }

}

Добавить эту зависимость

compile 'com.wdullaer:materialdatetimepicker:3.6.0'

Вы можете изменить цвета шрифта, цвета фона, цвета текста даты и времени, как описано в ссылка

...