Пользовательский выбор даты выглядит плохо на большом устройстве - PullRequest
0 голосов
/ 21 января 2020

Я создал простой пользовательский инструмент выбора даты в xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/datePickerLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <DatePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/mDatePicker"
        android:layout_gravity="center_horizontal"
        android:spinnersShown="true"
        android:calendarViewShown="false"
        android:layout_alignParentTop="true"/>
</RelativeLayout>

Он хорошо выглядит на маленьком устройстве, но на большом (планшете) выглядит так:

enter image description here

Окно намного больше, чем должно быть, хотя я установил ширину и высоту палитры даты в wrap_content. Что я могу сделать, чтобы содержимое окна выбора даты заполнило его окно? Я также пытался изменить размер текста, применяя пользовательскую тему, но это не помогло

В случае, если это имеет значение, вот пользовательский конструктор диалогов, который я использую для создания пользовательского средства выбора даты:

 val mCustomDatePicker = layoutInflater.inflate(R.layout.custom_date_picker, activityStageOne, false)

        val mDatePicker = mCustomDatePicker.findViewById(R.id.mDatePicker) as DatePicker
        mDatePicker.maxDate = (Calendar.getInstance().getTime().getTime())
//        mDatePicker.maxDate = (y)

        val mDialog = AlertDialog.Builder(this)
        mDialog.setView(mCustomDatePicker)

        addListenersForEditText()


        mDialog.setPositiveButton("OK", object : DialogInterface.OnClickListener {
            override fun onClick( dialog: DialogInterface, which: Int) {
                ageET.clearFocus()
                val mCalendar  = Calendar.getInstance()
                mCalendar.set(mDatePicker.year, mDatePicker.month, mDatePicker.dayOfMonth)

                val dateFormat = SimpleDateFormat(DATE_PATTERN)
                try {
                    age = dateFormat.format(mCalendar.time)
                } catch (e: ParseException) {
                    e.printStackTrace()
                }

                ageET.setText((mDatePicker.month + 1).toString() + " / " + mDatePicker.dayOfMonth.toString() + " / " + mDatePicker.year.toString())
            }
        }).setNegativeButton("Cancel", object: DialogInterface.OnClickListener {
            @Override
            override fun onClick( dialog: DialogInterface, which: Int) {
                ageET.clearFocus()
                dialog.dismiss()
            }
        })


        mDialog.create()

Я также попытался, как предложил Md, обратиться к пользовательской теме, как в стилях. xml:

<resources>

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

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:fontFamily">@font/alegreya</item>
    </style>

    <!-- Action bar application theme. -->
    <style name="AppThemeActionBar" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/white</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back_black_24dp</item>
        <item name="android:fontFamily">@font/alegreya</item>
    </style>

Но при обращении к ней в сборщике:

val mDialog = AlertDialog.Builder(this, R.style.Theme_Dialog)

Я получаю сообщение об ошибке «неразрешенная ссылка», как будто не удается найти Theme_Dialog

Ответы [ 3 ]

1 голос
/ 21 января 2020

Вы должны установить dialog theme в вашем AlertDialog при инициализации. Проверьте ниже:

val mDialog = AlertDialog.Builder(this, R.style.Theme_Dialog)

Добавьте этот стиль в ваш styles.xml

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

Или

<style name="Theme.Dialog" parent="Theme.MaterialComponents.Light.Dialog" />

Выход в Таблетка:

enter image description here

0 голосов
/ 21 января 2020

В моем исследовании для TimePicker вы должны использовать масштаб для преобразования размера ... Попробуйте это и помните об отзывчивости!

fE.

 android:scaleX="23dp"
 android:scaleY="23dp"
0 голосов
/ 21 января 2020

Вместо этого вы можете попытаться использовать совпадение с родителем wrap_content

<DatePicker
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
...