DatePickerDialog在屏幕上保存布局旋转

时间:2016-03-14 12:16:56

标签: android android-layout android-fragments screen-orientation android-datepicker

我有奇怪的问题。 我ActivityAppCompatActivity继承了Fragment。 在此Fragment中,我显示DatePickerDialog以选择日期。

Activity中声明为manifest.xml

<activity name=".SampleActivity" android:configChanges="keyboardHidden|orientation|screenLayout|screenSize" />

现在。 我想在DatePickerDialog内显示Fragment,因此我使用代码创建了自定义DatePickertFragment

public class DatePickerFragment extends AppCompatDialogFragment{
    // (...)
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
        return dialog;
    }
    // (...)
}

并在片段

中执行show()方法
 pickerFragment.show(getChildFragmentManager(), null);

我在onClick()方法中运行show picker代码。 DatePicker正确显示。

现在是问题。 Dialog在纵向屏幕方向正确显示,但当我将屏幕旋转到横向模式时,对话框似乎会在左右尺寸上切割。 我查了一下,我认为Dialog选择器没有改变屏幕旋转的布局方向。 截图如下 1.纵向,正确对话 enter image description here

  1. 接下来我旋转设备并在横向模式下我得到像剪切对话框(对话框纵向布局尺寸中的横向对话框布局) enter image description here
  2. 我将manifest.xml Activity声明更改为

    android:configChanges="keyboardHidden|orientation" 
    现在工作正常,但我不能这样做,因为其他应用程序部分将工作不正确。 所以我想知道在旋转屏幕后我是否可以使DialogPicker无效或重绘以调整边界大小?

4 个答案:

答案 0 :(得分:2)

使用onConfigurationChanged(Configuration newConfig)处理日历裁剪问题签出,我的代码与screenSize一起工作100%。 startDateDpd是“日期选择器”对话框,startDateTxt-单击此日期选择器对话框时将打开

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(startDateDpd!=null)
    if(startDateDpd.isVisible()){
        startDateDpd.dismiss();
        startDateTxt.performClick();
    }
}

答案 1 :(得分:2)

根据Sumedh Ulhe的回答,我发现DatePicker / TimePicker将在创建时间加载布局。

您可以看到rdd = sc.textFile("path") rddSplit = rdd.map(lambda l: l.split(delimiter)) rddKey = rddSplit.map(lambda l: l[keyIndex], l) rddJoin = rddKey.join(rddKey)

android-26\android\widget\TimePicker.java

mDelegate = new TimePickerClockDelegate(

android-26\android\widget\TimePickerClockDelegate.java

有两个R.layout.time_picker_material:final int layoutResourceId = a.getResourceId(R.styleable.TimePicker_internalLayout, R.layout.time_picker_material); android-26\data\res\layout\time_picker_material.xml

因此,当选择器已经打开时,我将重新创建选择器

android-26\data\res\layout-land\time_picker_material.xml

答案 2 :(得分:0)

使用

android:configChanges="keyboard|orientation|screenLayout"

或管理方法:

onConfigurationChanged(Configuration newConfig)

答案 3 :(得分:-1)

我遇到此问题,但使用TimePicker。我将它放在FrameLayout中并且它已被修复。