I am creating a DatePickerDialog that I want to apply a custom theme to. It's only applying part of the custom theme. I asked for no title and a windowBackground that's grey and the resulting entire dialog (except for the numbers and month) is orange. What am I doing wrong? Here is my custom theme:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="GPSTheme" parent="android:style/Theme.Dialog">
<item name="android:textColor">#000000</item>
<item name="android:windowTitleStyle">#style/Theme.Sherlock.Light</item>
<item name="android:background">#drawable/orange_gradient</item>
<item name="android:windowBackground">#drawable/cool_gradient</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
Here is where I am calling the dialog (from within a fragment):
btnStartDate.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
if (DatesValid(true, year, monthOfYear, dayOfMonth)) {
StartDate.set(Calendar.YEAR, year);
StartDate.set(Calendar.MONTH, monthOfYear);
StartDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
SetTextDates();
} else {
Toast.makeText(
getActivity(),
"Start Date cannot be greater than End Date",
Toast.LENGTH_SHORT).show();
}
GetDistanceTraveledForTime();
}
};
DatePickerDialog d = new DatePickerDialog(getActivity(),
R.style.GPSTheme, mDateSetListener,
StartDate.get(Calendar.YEAR), StartDate
.get(Calendar.MONTH), StartDate
.get(Calendar.DAY_OF_MONTH));
//DatePicker dp = d.getDatePicker();
//LinearLayout l = (LinearLayout)dp.getChildAt(0);
//l.setBackgroundColor(R.drawable.orange_gradient);
d.setIcon(R.drawable.calendar_2_icon);
d.show();
}
});
I looked here: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml for all the inherited attributes of Theme.Dialog.
Here is a screen shot:
Related
I'm seeing an extra space on the right of the DatePickerDialog, only on Android M & N builds. It's not observed on L based build. Here's the screenshot:
Has anyone faced this problem ?
This is the implementation of DatePickerFragment:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
public static DatePickerFragment newInstance(int day, int month, int year)
{
DatePickerFragment frag = new DatePickerFragment();
Bundle args = new Bundle();
args.putInt("day", day);
args.putInt("month", month);
args.putInt("year", year);
frag.setArguments(args);
return frag;
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
int year = getArguments().getInt("year");
int month = getArguments().getInt("month");
int day = getArguments().getInt("day");
DatePickerDialog datePickerDialog =new DatePickerDialog(getActivity(), this, year, month, day);
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
return datePickerDialog;
}
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
try
{
DatePickerDialogListener listener = (DatePickerDialogListener)getActivity();
listener.onFinishDatePickDialog(year, monthOfYear + 1, dayOfMonth);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
// 1. Defines the listener interface with a method passing back data result.
public interface DatePickerDialogListener {
void onFinishDatePickDialog(int year, int monthOfYear, int dayOfMonth);
}
}
And here's the style sheet which has a component for android:datePickerDialogTheme
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowContentTransitions">true</item>
<item name="colorControlNormal">#color/colorAccent</item>
<item name="colorControlActivated">#color/colorAccent</item>
<item name="colorControlHighlight">#color/colorAccent</item>
<item name="textColorError">#android:color/holo_red_dark</item>
<item name="android:timePickerDialogTheme">#style/AlertDialogCustom</item>
<item name="android:datePickerDialogTheme">#style/AlertDialogCustom</item>
<item name="android:alertDialogTheme">#style/AlertDialogCustom</item>
</style>
<style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert">
<item name="android:colorPrimary">#color/colorPrimary</item>
<item name="android:colorAccent">#color/colorAccent</item>
</style>
NOTE: The issue is not seen if I don't use the styles to modify color.
Do not use Theme.AppCompat.Light.Dialog.Alert, simply use Theme.AppCompat.Light.Dialog is ok. As you look inside,
<style name="Base.ThemeOverlay.AppCompat.Dialog.Alert">
<item name="android:windowMinWidthMajor">#diem/abc_dialog_min_width_major</item>
<item name="andorid:windowMinWidthMinor">#dimen/abc_dialog_min_width_minor</item>
</style>
There is additional size amendment on the style, which turns out is undesired.
I found the fix, it was an issue with my style. I updated the parent to Theme.AppCompat.Light.Dialog.Alert instead of android:Theme.Material.Light.Dialog.Alert and it worked.
Also android:colorAccent has to be changed to colorAccent or else the Calendar Selector color stays Green
Here's what the final style should look like
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">#color/colorAccent</item>
</style>
I'm using a DatePickerDialog in a DialogFragment, which works fine.
I would like to change the colors of:
the background of the action bar
the background of the buttons
the dividers
Here is my DialogFragment:
public class DatePickerDialogFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{
#Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
// init :
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.DatePickerDialogTest, this, year, month, day);
datePickerDialog.getDatePicker().setBackgroundColor(0xFF500000);
return datePickerDialog;
}
...
}
And here is the style:
<style name="DatePickerDialogTest" parent="Theme.AppCompat.Dialog.Alert">
<item name="android:windowBackground">#android:color/transparent</item>
<item name="android:textColorPrimary">#FF00FF00</item>
<item name="colorAccent">#FFFF0000</item>
<item name="android:divider">#android:color/holo_purple</item>
</style>
Every color I use displays properly, except for the backgrounds of the action bar, buttons and dividers.
Is there any way I can easily change those colors?
Thanks.
I'm struggling with android calendar styling. It turns out that android 6 ignores calendarTextColor and uses textColorPrimary in order to style day labels as well as textColorSecondary to style day of weeks. I've checked calendarTextColor on android 5 and it works correctly. According to the documentation textColorPrimary is used as Toolbar text color. https://developer.android.com/training/material/theme.html So my toolbar text color is white and I receive white day labels on a white background. How to specify calendarTextColor without touching textColorPrimary for android api 23?
You could make a custom theme for the datepicker and specify text color there
try this
<style name="datePickerTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorPrimary">#color/colorPrimary</item>
<item name="colorPrimaryDark">#color/colorPrimaryDark</item>
<item name="colorAccent">#color/colorPrimary</item>
<item name="android:textColorPrimary">#color/colorBlack</item>
<item name="android:textColorSecondary">#color/colorBlack</item>
<item name="android:textColorTertiary">#color/colorBlack</item>
</style>
and then you can specify this theme when you call your DatePickerDialog like this
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
String myFormat = "MM/dd/yy"; //In which you need put here
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
calendar.setText(sdf.format(myCalendar.getTime()));
}
};
calendar.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
new DatePickerDialog(YourActivity.this,R.style.datePickerTheme, date, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
}
I'm creating a form that consists of EditTexts which launch DatePickerDialogs and TimePickerDialogs.
Here are the sections of the code:
DatePickerDialog
DatePickerDialog datePicker = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(android.widget.DatePicker view, int chosenYear, int chosenMonth, int chosenDate) {
year = chosenYear;
month = chosenMonth;
date = chosenDate;
set(year, month, date);
}
}, year, month, date);
datePicker.setTitle("Select Date");
datePicker.show();
TimePickerDialog
TimePickerDialog timePicker = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
#Override
public void onTimeSet(android.widget.TimePicker view, int chosenHour, int chosenMinute) {
hour = chosenHour;
minute = chosenMinute;
set(hour, minute);
}
}, hour, minute, false);
timePicker.setTitle("Select Time");
timePicker.show();
Everything works as it should be such as launching the dialogs and setting the date properly. There's this one problem. The previews are not rendered. I don't know why. Hope someone could help. Thanks.
Here are the screenshots:
Notice the white backgrounds.
in your styles.xml add two new styles:
<style name="DatePicker" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">#color/your_color</item>
</style>
<style name="TimePicker" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">#color/your_color</item>
</style>
Then refer to these styles in your custom theme as followed:
<item name="android:datePickerDialogTheme" tools:targetApi="21">#style/DatePicker</item>
<item name="android:timePickerDialogTheme" tools:targetApi="21">#style/TimePicker</item>
I am tying to change the divider color of the DatePicker Dialog.
I already checked all duplicate questions but i didn't get anything which is working.
I want to use orange color instead of this blue color of this divider.
Right now my datepicker looks like this and i also want to remove this background of whole date picker.
I used this code for datepicker dialog
final Calendar calendarDate = Calendar.getInstance();
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
calendarDate.set(Calendar.YEAR, year);
calendarDate.set(Calendar.MONTH, monthOfYear);
calendarDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
}
};
DatePickerDialog datePickerDialog = new DatePickerDialog(mContext,
dateSetListener, calendarDate.get(Calendar.YEAR), calendarDate
.get(Calendar.MONTH), calendarDate
.get(Calendar.DAY_OF_MONTH));
datePickerDialog.getDatePicker().setCalendarViewShown(false);
datePickerDialog.show();
Screeshot :
Use Custom Style to change the divider color/theme from your drawable image as below:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="YourTheme" parent="#android:style/Theme">
<item name="android:divider">#drawable/dialog_divider_color</item>
</style>
</resources>
and update the AndroidManifest.xml file with the android:theme="YourTheme" for the <activity/>