如何解决在AlertDialog解雇后,Edittext越来越受到关注并显示键盘
我在一个片段和一个AlertDialog中都有一个EditText。我正在使用EditText,然后单击完成按钮。但是,每当我关闭AlertDialog时,Edittext就会获得焦点并显示键盘。我不想在AlerDialog关闭后显示键盘。我该如何解决?
https://www.youtube.com/watch?v=mbTQmAnOvBg
我在关闭AlertDialog后使用了val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(view.windowToken,0)
,但是没有用。
MainFragment.kt
import android.app.AlertDialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.lifecycle.viewmodel
import androidx.lifecycle.viewmodelProvider
import androidx.navigation.NavDirections
import androidx.navigation.Navigation
import com.martiandeveloper.decisionmaker.R
import com.martiandeveloper.decisionmaker.databinding.DialogoptionBinding
import com.martiandeveloper.decisionmaker.databinding.FragmentMainBinding
import com.martiandeveloper.decisionmaker.viewmodel.Mainviewmodel
import timber.log.Timber
class MainFragment : Fragment() {
private lateinit var fragmentMainBinding: FragmentMainBinding
private lateinit var mainviewmodel: Mainviewmodel
private lateinit var optionDialog: AlertDialog
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
fragmentMainBinding =
DataBindingUtil.inflate(inflater,R.layout.fragment_main,container,false)
return fragmentMainBinding.root
}
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
initUI()
}
private fun initUI() {
mainviewmodel = getviewmodel()
fragmentMainBinding.mainviewmodel = mainviewmodel
fragmentMainBinding.lifecycleOwner = this
observe()
optionDialog = AlertDialog.Builder(context).create()
}
private fun getviewmodel(): Mainviewmodel {
return viewmodelProvider(this,object : viewmodelProvider.Factory {
override fun <T : viewmodel?> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
return Mainviewmodel() as T
}
})[Mainviewmodel::class.java]
}
private fun navigate(navDirections: NavDirections) {
view?.let { Navigation.findNavController(it).navigate(navDirections) }
}
private fun observe() {
mainviewmodel.eventOptionMBTNClick.observe(viewLifecycleOwner,{
if (it) {
mainviewmodel.setIsOptionDialogShowing(true)
mainviewmodel.onoptionMBTNClickComplete()
}
})
mainviewmodel.eventDecideMBTNClick.observe(viewLifecycleOwner,{
if (it) {
Timber.i("Decide")
mainviewmodel.onDecideMBTNClickComplete()
}
})
mainviewmodel.eventCancelMBTNClick.observe(viewLifecycleOwner,{
if (it) {
mainviewmodel.setIsOptionDialogShowing(false)
mainviewmodel.onCancelMBTNClickComplete()
}
})
mainviewmodel.eventDoneMBTNClick.observe(viewLifecycleOwner,{
if (it) {
Timber.i("Done")
mainviewmodel.onDoneMBTNClickComplete()
}
})
mainviewmodel.isOptionDialogShowing.observe(viewLifecycleOwner,{
if (it) {
showOptionDialog()
} else {
if (optionDialog.isShowing) {
optionDialog.dismiss()
}
}
})
}
private fun showOptionDialog() {
val binding = DialogoptionBinding.inflate(LayoutInflater.from(context))
binding.mainviewmodel = mainviewmodel
binding.lifecycleOwner = this
binding.dialogoptionoptionET.requestFocus()
optionDialog.setView(binding.root)
optionDialog.setCanceledOnTouchOutside(false)
optionDialog.setCancelable(false)
optionDialog.show()
val window = optionDialog.window
window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
window?.setSoftInputMode(WindowManager.LayoutParams.soFT_INPUT_STATE_ALWAYS_VISIBLE)
}
}
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="mainviewmodel"
type="com.martiandeveloper.decisionmaker.viewmodel.Mainviewmodel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".view.MainFragment">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/fragment_main_mainTIL"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:textColorHint="@color/woodland"
app:BoxstrokeColor="@color/woodland"
app:hintAnimationEnabled="false"
app:hintTextColor="@color/woodland"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background"
android:fontFamily="@font/actor"
android:hint="@string/ask_me_your_question_here"
android:imeOptions="actionDone"
android:inputType="text"
android:text="@={mainviewmodel.questionET}"
android:textColor="@color/apple_white"
android:textColorHint="@color/woodland" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/fragment_main_optionsMTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/actor"
android:text="@string/options"
android:textColor="@color/woodland"
app:layout_constraintEnd_toEndOf="@id/fragment_main_mainTIL"
app:layout_constraintStart_toStartOf="@id/fragment_main_mainTIL"
app:layout_constraintTop_toBottomOf="@id/fragment_main_mainTIL" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@id/fragment_main_buttonsll"
app:layout_constraintTop_toBottomOf="@id/fragment_main_optionsMTV">
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/actor"
android:textColor="@color/apple_white"
android:textSize="18sp" />
</ScrollView>
<LinearLayout
android:id="@+id/fragment_main_buttonsll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:backgroundTint="@color/antarctic_deep"
android:fontFamily="@font/actor"
android:onClick="@{() -> mainviewmodel.onoptionMBTNClick()}"
android:text="@string/option"
android:textAllCaps="false"
android:textColor="@color/apple_white"
app:cornerRadius="0dp"
app:icon="@drawable/ic_option"
app:iconTint="@color/moorland_mist"
app:strokeColor="@color/woodland"
app:strokeWidth="1dp" />
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:backgroundTint="@color/antarctic_deep"
android:fontFamily="@font/actor"
android:onClick="@{()->mainviewmodel.onDecideMBTNClick()}"
android:text="@string/decide"
android:textAllCaps="false"
android:textColor="@color/apple_white"
app:cornerRadius="0dp"
app:icon="@drawable/ic_decide"
app:iconTint="@color/moorland_mist"
app:strokeColor="@color/woodland"
app:strokeWidth="1dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
dialog_option.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="mainviewmodel"
type="com.martiandeveloper.decisionmaker.viewmodel.Mainviewmodel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/moorland_mist"
android:orientation="vertical"
android:padding="16dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/dialog_option_optionET"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/woodland"
app:BoxstrokeColor="@color/woodland"
app:hintAnimationEnabled="false"
app:hintTextColor="@color/woodland">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background"
android:fontFamily="@font/actor"
android:hint="@string/enter_your_option_here"
android:imeOptions="actionDone"
android:inputType="text"
android:text="@={mainviewmodel.optionET}"
android:textColor="@color/apple_white"
android:textColorHint="@color/woodland" />
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:backgroundTint="@color/antarctic_deep"
android:fontFamily="@font/actor"
android:onClick="@{() -> mainviewmodel.onCancelMBTNClick()}"
android:text="@string/cancel"
android:textAllCaps="false"
android:textColor="@color/apple_white"
app:cornerRadius="0dp"
app:icon="@drawable/ic_cancel"
app:iconTint="@color/moorland_mist"
app:strokeColor="@color/woodland"
app:strokeWidth="1dp" />
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:backgroundTint="@color/antarctic_deep"
android:fontFamily="@font/actor"
android:onClick="@{()->mainviewmodel.onDoneMBTNClick()}"
android:text="@string/done"
android:textAllCaps="false"
android:textColor="@color/apple_white"
app:cornerRadius="0dp"
app:icon="@drawable/ic_done"
app:iconTint="@color/moorland_mist"
app:strokeColor="@color/woodland"
app:strokeWidth="1dp" />
</LinearLayout>
</LinearLayout>
</layout>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。