微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在AlertDialog解雇后,Edittext越来越受到关注并显示键盘

如何解决在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 举报,一经查实,本站将立刻删除。