问题描述
我在一个片段和一个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 (将#修改为@)