Android 7.1.1上DatePicker控件出现额外的内边距/外边距

9

我试图制作一个自定义对话框来显示DatePicker,但是该元素会在视图右侧添加额外的边距/填充。这仅发生在Android 7.1.1,Nexus 6P上,但在其他分辨率较低的手机上完全正常。如何去除额外的填充?
我的XML布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:endYear="2012"
        android:startYear="1930" />

</LinearLayout>

这在Android 7.1.1上看起来是这样的: 问题截图 编辑:添加了我的Java代码:
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_attributes);

    assert getSupportActionBar() != null;
    getSupportActionBar().setTitle("Register");

    final TextView birthDateSelectedTextView = (TextView) findViewById(R.id.text_view_birth_date);
    Button dialogOpenButton = (Button) findViewById(R.id.button_dialog_date_picker);
    dialogOpenButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Dialog dialog = new Dialog(UserAttributesActivity.this);
            final AlertDialog.Builder builder = new AlertDialog.Builder(UserAttributesActivity.this);
            LayoutInflater inflater = getLayoutInflater();
            View dialogView = inflater.inflate(R.layout.dialog_date_picker, null);
            builder.setView(dialogView);
            final DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.date_picker);

            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    day = datePicker.getDayOfMonth();
                    month = datePicker.getMonth() + 1;
                    year = datePicker.getYear();
                    String date = "" + day + "/" + month + "/" + year;
                    birthDateSelectedTextView.setText(date);
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            builder.show();
        }
    });
}

如果可能的话,请发布您的Java代码。 - Ankita Shah
@AnkitaShah 已经添加了。我不认为在 Java 方面有做错什么,因为它可以在我设置用来测试应用程序的所有模拟器上工作。 - Dhruvil Mehta
4个回答

9

使用AlertDialog.Builder添加样式,如下所示。

AlertDialog.Builder builder = new AlertDialog.Builder(UserAttributesActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar);

2

@Ankita 是正确的,但如果你正在使用 AppCompat,则会涉及到更多的事情:

定义一个新样式,并扩展 AppCompat 的 Light.Dialog 样式。

<style name="DatePickerDialogStyle" parent="@style/Theme.AppCompat.Light.Dialog">
    ...
</style>

然后添加属性以模仿NoActionBar部分:

<style name="DatePickerDialogStyle" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

最后,既然你不再从AppTheme获取应用兼容的颜色,请将它们复制到你的新主题中:
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

<style name="DatePickerDialogStyle" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimary">@color/primary<item>
    <item name="colorPrimaryDark">@color/primary_darkitem>
    <item name="colorAccent">@color/accent</item>
</style>

然后应用这个新主题:

AlertDialog.Builder builder 
    = new AlertDialog.Builder(UserAttributesActivity.this,
    DatePickerDialogStyle);

0
如果您正在使用类似 androidx.fragment.app.DialogFragment() 的类,请执行以下操作:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Set the dialog style.
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar)
}

0

使用这个

DatePickerDialog.Builder builder = null;
// 5.0+ 需要更换主题以去除右侧白边
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    builder = new DatePickerDialog.Builder(this.getActivity(),
            android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar);
}
// 4.4 不需要,相反加上会有白边
else {
    builder = new DatePickerDialog.Builder(this.getActivity());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接