以编程方式在Android中更改DatePicker日历大小

时间:2018-04-06 09:36:04

标签: java android android-studio android-datepicker datepickerdialog

我正在做一个Android应用程序,我必须显示一个DatePickerDialog。事实是,应用程序将位于具有智能屏幕的设备上,并且日历不适合它。我希望日历更小,同时保持相同的比例。

Look like this

我尝试使用DatePicker上的ScaleYScaleX函数来调整它的大小,但它只是调整了所有DatePickers的大小。

Like this

这是我用来显示DatePickerDialog

的代码
public void ShowDate() {
    final Calendar c = Calendar.getInstance();


    year = c.get(Calendar.YEAR);
    month = c.get(Calendar.MONTH);
    day = c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog dateForm = new DatePickerDialog(ViewForm.this, R.style.ColorOne, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {

        }
    }, year, month, day);
    dateForm.show();

    DatePicker dp = dateForm.getDatePicker();

    dp.setScaleY(Float.parseFloat("0.5"));
    dp.setScaleX(Float.parseFloat("0.5"));
}

我希望有人知道如何做到这一点

谢谢

3 个答案:

答案 0 :(得分:1)

您可以通过编程方式更改widthheight DatePickerDialog,只需使用WindowManager.LayoutParams params = dateForm.getWindow().getAttributes();即可看到此示例:

        final Calendar c = Calendar.getInstance();

        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dateForm = new DatePickerDialog(this, R.style.AppTheme, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {

            }
        }, year, month, day);

        DatePicker dp = dateForm.getDatePicker();

        WindowManager.LayoutParams params = dateForm.getWindow().getAttributes();

        params.gravity = Gravity.TOP;
//        params.x = 0; // locationByX;
//        params.y = 0; // locationByY;
        params.width = 600; // dialogWidth;
//        params.height = 1000; // dialogHeight;

        dateForm.getWindow().setAttributes(params);

        dateForm.show();

//        dp.setScaleY(Float.parseFloat("0.7"));
//        dp.setScaleX(Float.parseFloat("0.7"));

答案 1 :(得分:0)

试试这个

dateForm.getWindow().setLayout(width,height)

宽度&特定高度作为设备分辨率大小维护维度文件或使用SDP库。

或针对该特定分辨率使用AlertDialog.THEME_HOLO_LIGHT,如下所示:

DatePickerDialog dateForm = new DatePickerDialog(ViewForm.this, AlertDialog.THEME_HOLO_LIGHT, new DatePickerDialog.OnDateSetListener() {}

答案 2 :(得分:0)

可以使用以下代码:

  if (datePickerDialog.getWindow() != null) {
        datePickerDialog.getWindow().setLayout(WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.WRAP_CONTENT);
        datePickerDialog.getWindow().setGravity(Gravity.CENTER);
  }

您也可以设置自定义宽度和高度,而不是LayoutParams.WRAP_CONTENT。