gpt4 book ai didi

android - BottomSheetDialogFragment AdjustResize SoftInput 不起作用

转载 作者:行者123 更新时间:2023-12-02 04:26:16 25 4
gpt4 key购买 nike

嘿,我目前正在尝试使用以下布局创建一个 BottomSheetDialogFragment:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:fitsSystemWindows="true"
android:layout_alignParentBottom="true">
<com.indico.recorder.views.DonkeyConstraintLayout
android:id="@+id/album_edit_info_container"
android:layout_width="match_parent"
android:backgroundTint="@color/colorBackgroundTinted"
android:layout_height="wrap_content"
android:clipChildren="true"
android:clipToPadding="true">
<View
android:id="@+id/album_edit_draggable_indicator"
android:layout_width="40dp"
android:layout_height="4dp"
android:alpha="0.65"
android:background="@drawable/draggable_indicator"
app:layout_constraintBottom_toTopOf="@id/album_edit_title_container"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:elevation="1dp"/>
<android.support.design.widget.TextInputLayout
android:id="@+id/album_edit_title_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/album_edit_draggable_indicator"
app:layout_constraintBottom_toTopOf="@id/album_edit_description_container"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.indico.recorder.views.AutoClearEditText
android:id="@+id/album_edit_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLength="@integer/media_title_max_length"
android:hint="@string/session_name_hint"
android:imeOptions="actionNext"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/album_edit_description_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toTopOf="@id/albumEditDivider"
app:layout_constraintTop_toBottomOf="@id/album_edit_title_container"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<android.support.design.widget.TextInputEditText
android:id="@+id/album_edit_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="75dp"
android:textAlignment="textStart"
android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
android:maxLines="@integer/media_description_max_length"
android:hint="@string/session_description_hint"
android:gravity="start|top"
android:visibility="visible"/>
</android.support.design.widget.TextInputLayout>
<View
android:id="@+id/albumEditDivider"
android:layout_width="match_parent"
android:layout_height="0.2dp"
android:alpha="0.75"
android:background="@drawable/divider_horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/album_edit_description_container"
app:layout_constraintStart_toStartOf="parent"/>
</com.indico.recorder.views.DonkeyConstraintLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/album_edit_activate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:padding="16dp"
android:background="@drawable/capture_selection_item_background">
<ImageView
android:id="@+id/album_edit_activate_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_check_white_24dp"
android:layout_gravity="center"
android:tint="@color/colorPrimary"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/album_edit_activate_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginStart="16dp"
android:text="@string/album_edit_activate"
android:layout_centerInParent="true"
android:textColor="@color/colorOnSurface"
android:textSize="20sp"
app:layout_constraintStart_toEndOf="@id/album_edit_activate_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</android.support.constraint.ConstraintLayout>
</LinearLayout>

此处的目的是使出现的软输入调整大小并锚定在整个布局下方,而不是平移到 edttextfields。基于对如何使其与 fitSystemWindows 一起工作的大量研究和其他窗口属性导致我所有的 Bottom Sheet 都采用以下样式:
<style name="BottomSheet.Theme" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/BottomSheet.Style</item>
<item name="windowNoTitle">true</item>
<item name="android:label">@null</item>
<item name="android:fitsSystemWindows">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowSoftInputMode">adjustPan|stateVisible</item>
<item name="android:windowClipToOutline">true</item>
</style>

<style name="BottomSheet.Style" parent="Widget.Design.BottomSheet.Modal">
<item name="behavior_peekHeight">300dp</item>
<item name="android:background">@drawable/squared_card_background</item>
<item name="behavior_hideable">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowSoftInputMode">adjustPan|stateVisible</item>
</style>

我没有指定 windowSoftInputMode在 list 中,因为应用程序的其余部分需要默认行为。

Bottom Sheet fragment :
class AlbumCreateSheet: BottomSheetDialogFragment(), View.OnClickListener {

companion object {
private val tag = AlbumCreateSheet::class.java.simpleName
fun show(fragmentManager: FragmentManager) {
return AlbumCreateSheet().show(fragmentManager, tag)
}
}

private lateinit var titleView: EditText
private lateinit var descriptionView: EditText

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
dialog.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
return inflater.inflate(R.layout.sheet_album_create, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

titleView = view.findViewById(R.id.album_create_title)
descriptionView = view.findViewById(R.id.album_create_description)

view.findViewById<View>(R.id.album_create_create).setOnClickListener(this)

}

override fun onClick(v: View?) {
when(v?.id) {
R.id.album_create_create -> {
useDefaultRealm {
executeTransaction {
val session = Session(name = titleView.text.toString(),
description = descriptionView.text.toString())
it.insertOrUpdate(session)
}
}
dismiss()
}
}
}
}

任何关于如何解决这个问题的提示,以及使软输入调整整个底部的大小都非常受欢迎:)

最佳答案

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState)

dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
dialog.setOnShowListener {
Handler().post {
val bottomSheet = (dialog as? BottomSheetDialog)?.findViewById<View>(R.id.design_bottom_sheet) as? FrameLayout
bottomSheet?.let {
BottomSheetBehavior.from(it).state = BottomSheetBehavior.STATE_EXPANDED
}
}
}

return dialog

关于android - BottomSheetDialogFragment AdjustResize SoftInput 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com