Я хочу создать динамический экран входа в систему, который включает в себя декоративное изображение бренда, когда экран достаточно высокий, но исключает изображение на коротких экранах. Когда появится клавиатура, скорее всего, изображение нужно будет удалить. Когда клавиатура скрыта, изображение может вернуться.
На веб-странице я просто использовал бы медиа-запросы CSS для высоты устройства, соответственно отображал или скрывал изображение, и все это работало бы замечательно. Я не думаю, что что-то простое и чистое возможно для представления Android, не так ли? Поэтому я считаю, что мне нужно знать высоту окна при создании действия и соответствующим образом создать представление.
В манифесте я установил свою основную активность на adjustResize
при появлении клавиатуры. Когда появляется клавиатура, мой вид изменяется, но моя активность неожиданно не воссоздается. Когда экран поворачивается, действие воссоздается.
В документации говорится, что представление будет воссоздано при изменении доступности клавиатуры. Первый абзац от https://developer.android.com/guide/topics/resources/runtime-changes
Некоторые конфигурации устройств могут изменяться во время выполнения (например, ориентация экрана, доступность клавиатуры и когда пользователь включает многооконный режим). Когда такое изменение происходит, Android перезапускает запущенную активность (вызывается onDestroy (), а затем onCreate ()). Поведение при перезапуске разработано, чтобы помочь вашему приложению адаптироваться к новым конфигурациям, автоматически перезагружая ваше приложение альтернативными ресурсами, соответствующими новой конфигурации устройства.
Мои вопросы
Как лучше всего справиться с моей дизайнерской задачей?
Почему моя активность не воссоздается при появлении клавиатуры?
Ниже приведены соответствующие части моего тестового приложения. В этом нет изображения, так как я даже не дошел до того, что столкнулся с поведением, противоречащим документации.
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("MainActivity", "onCreate")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/intro"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="Top"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/colorAccent" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/intro"
android:singleLine="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="Bottom"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@color/colorAccent" />
</android.support.constraint.ConstraintLayout>