daz*_*000 7 android datepicker android-alertdialog
我有一个使用非常简单的自定义布局的DatePickerFragment.布局占用较小设备(HTC One m7)上的整个警报对话框,但不在Nexus 6上.有人知道为什么DatePicker不占用Nexus 6警报对话框的整个宽度或从哪里开始排除故障?谢谢!
Nexus 6(注意日期标题不会填满整个警报对话框)
HTC One m7
dialog_date.xml
<?xml version="1.0" encoding="utf-8"?>
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_date_date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:calendarViewShown="false">
</DatePicker>
Run Code Online (Sandbox Code Playgroud)
DatePickerFragment的onCreateDialog()
public Dialog onCreateDialog(Bundle savedInstanceState) {
Date date = (Date) getArguments().getSerializable(ARG_DATE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_date, null);
mDatePicker = (DatePicker)
v.findViewById(R.id.dialog_date_date_picker);
mDatePicker.init(year, month, day, null);
return new AlertDialog.Builder(getActivity())
.setView(v)
// .setTitle(R.string.date_picker_title)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int year = mDatePicker.getYear();
int month = mDatePicker.getMonth();
int day = mDatePicker.getDayOfMonth();
Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, date);
}
})
.create();
}
Run Code Online (Sandbox Code Playgroud)
Yun*_*LIU 10
原因是AlertDialog比子DatePicker占用更多空间.
确保使用Theme.AppCompat.Light.Dialog没有.Alert后缀的对话框主题(例如).
daz*_*000 -1
我无法使用 nitzanj 的建议来让它工作,但我改变了创建 DatePickerDialog 的方式,它现在按预期工作。完整的来源如下。主要区别在于 onCreateDialog。
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener{
public static final String EXTRA_DATE =
"com.amicly.acaringtext.date";
private static final String ARG_DATE = "date";
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Date date = (Date) getArguments().getSerializable(ARG_DATE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public static DatePickerFragment newInstance(Date date) {
Bundle args = new Bundle();
args.putSerializable(ARG_DATE, date);
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(args);
return fragment;
}
private void sendResult(int resultCode, Date date) {
if (getTargetFragment() == null) {
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA_DATE, date);
getTargetFragment().
onActivityResult(getTargetRequestCode(), resultCode, intent);
}
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, date);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3591 次 |
| 最近记录: |