Как изменить цвет Calender Dialog для Android
В моем приложении я использую диалог DatePicker и диалог выбора времени, чтобы выбрать дату и время соответственно. Теперь в этом диалоге цвет устанавливается на основе моего Themecolor. Но что я хочу сделать, это изменить эти цвета вручную. Например, я изменил цвет панели инструментов, таким образом toolbar.setBackgroundColor(Constant.color); Но, как я могу вручную изменить цвет заголовка (где отображается текущая дата - я прикрепил картинку) и цвет указателя даты (круглый указатель, который указывает текущую дату) таким же образом.
Вот мое изображение DeatepickerDialog
Вот мой код для диалога выбора даты
public class TodoAddActivity extends AppCompatActivity {
// Variables
private Context mContext;
....
private RealmResults<TodoModel> results;
public final static String INTENT_KEY_ID = "taskId";
public final static String DATE_FORMAT = "dd/MMM/yy";
Constant constant;
SharedPreferences app_preferences;
int appTheme;
int themeColor;
int appColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.todo_add_layout);
app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
appColor = app_preferences.getInt("color", 0xff3F51B5);
appTheme = app_preferences.getInt("theme", 0xff3F51B5);
themeColor = appColor;
constant.color = appColor;
if (themeColor == 0){
setTheme(Constant.theme);
}else if (appTheme == 0){
setTheme(Constant.theme);
}else{
setTheme(appTheme);
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_add);
toolbar.setBackgroundColor(Constant.color);
setSupportActionBar(toolbar);
mContext = this;
realm=Realm.getDefaultInstance();
setUpUIViews();
showData();
final String taskId = getIntent().getStringExtra(INTENT_KEY_ID);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (taskId == null)
addTask();
else
editTask(taskId);
}
});
mTaskDateEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
datePicker(view);
}
});
mTaskDateEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (b)
datePicker(view);
}
});
mTaskTimeEditText.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
timePicker( view );
}
} );
mTaskTimeEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (b)
timePicker( view );
}
});
if (taskId != null) {
fillTask(realm.where(TodoModel.class).equalTo("id", taskId).findFirst());
button.setText("EDIT");
}
}
private void setUpUIViews() {
...
}
public void showData(){
//tasks = new ArrayList<>(); //error
//RealmResults<TodoModel> tasksResult = realm.where(TodoModel.class).findAll();
//for (TodoModel task : tasksResult)
// tasks.add(task); //error*/
results = realm.where(TodoModel.class).findAll();
}
protected TodoModel getTask(int position) {
return results.get(position);
}
private void fillTask(TodoModel task) {
...
}
private void addTask() {
...
}
protected void addTask(TodoModel task) {
..
}
private void editTask(String taskId) {
S....
}
protected void updateTask(TodoModel task) {
....
}
private void datePicker(final View view) {
Calendar currentTime = Calendar.getInstance();
int year = currentTime.get(Calendar.YEAR);
int monthOfYear = currentTime.get(Calendar.MONTH);
int dayOfMonth = currentTime.get(Calendar.DAY_OF_MONTH);
DatePickerDialog mDatePickerDialog = new DatePickerDialog(mContext,0, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
((EditText) view).setText(sdf.format(calendar.getTime()));
}
}, year, monthOfYear, dayOfMonth);
mDatePickerDialog.setTitle("Select Time");
mDatePickerDialog.show();
}
private void timePicker(final View view) {
Calendar mcurrentTime = Calendar.getInstance();
int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
int minute = mcurrentTime.get(Calendar.MINUTE);
TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(mContext,0, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
mTaskTimeEditText.setText( selectedHour + ":" + selectedMinute);
}
}, hour, minute, true);//Yes 24 hour time
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
}
2 ответа
Попробуйте сделать это:
В вашем файле styles.xml добавьте следующее:
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">@color/yourColor</item>
</style>
Тогда в вашем DatePicker сделайте это вместо этого.
DatePickerDialog mDatePickerDialog = new DatePickerDialog(mContext, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener()
new DatePickerDialog(MainActivity.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//Your Code
}
}, year, monthOfYear, dayOfMonth).show();
РЕДАКТИРОВАТЬ - изменил тему на Theme.AppCompat.Light.Dialog, как предложено
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">@color/xyz</item>
</style>