Я создал простой пользовательский инструмент выбора даты в 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>
Он хорошо выглядит на маленьком устройстве, но на большом (планшете) выглядит так:
Окно намного больше, чем должно быть, хотя я установил ширину и высоту палитры даты в 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