【Android】Dialog弹出软键盘时把布局顶起来的实现

这篇具有很好参考价值的文章主要介绍了【Android】Dialog弹出软键盘时把布局顶起来的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Android】Dialog弹出软键盘时把布局顶起来的实现

demo效果如下:
【Android】Dialog弹出软键盘时把布局顶起来的实现,android,Dialog,Android软键盘

代码实现

class AICodeDialog(val activity: BaseActivity) : Dialog(activity),View.OnClickListener, AIRedPkgView {

    private lateinit var mBgView: View
    private lateinit var mClose: View
    private lateinit var mUse: View
    private lateinit var mEditText: McdEditTextView
    private var mCode: String? = null

    private var mPresenter: AIRedPkgPresenter? = null

    override fun show() {
        if (context is Activity && ((context as Activity).isFinishing || (context as Activity).isDestroyed)) {
            return
        }
        mCode?.let {
            mEditText.setText(it.toCharArray(), 0, it.length)
            mEditText.setSelection(it.length)
            mCode = null
        }
        super.show()
    }

    fun setCode(code: String?) {
        mCode = code
    }

    override fun hide() {
        ExtendUtil.hideSoftInput(context, mEditText)
        mCode = null
        mEditText.setText("")
        super.hide()
    }

    init {
        initView()
    }

    private fun initView() {
        val view = LayoutInflater.from(context).inflate(R.layout.reward_ai_code_dialog, null)
        setContentView(view)

        mClose = findViewById(R.id.iv_close)
        mEditText = findViewById(R.id.et_code)
        mBgView = findViewById(R.id.fl_demo)
        mUse = findViewById(R.id.iv_use)
        mClose.setOnClickListener(this)
        mBgView.setOnClickListener(this)
        mUse.setOnClickListener(this)
        setOnShowListener { showKeyboard() }
        setCanceledOnTouchOutside(true)
        val params = window?.attributes
        params?.width = AppConfigLib.sScreenWidth
        params?.height = WindowManager.LayoutParams.MATCH_PARENT
        params?.gravity = android.view.Gravity.BOTTOM
        window?.attributes = params
        window?.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window?.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
        window?.setBackgroundDrawableResource(R.color.lib_transparent)
    }

    private fun showKeyboard() {
        mEditText.requestFocus()
        mEditText.postDelayed({
            if (isShowing) {
                ExtendUtil.toggleSoftInput(context)
            }
        }, 200)
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.iv_use -> {
                TrackUtil.trackPopupClick(
                    AppTrackPage.AIPhoto,
                    "提示弹窗",
                    "活动协议",
                    "使用"
                )
                if (!AppConfigLib.isLogin()) {
                    RouterUtil.resolve(
                        context, GlobalPageRouterConfig.COMPONENT_NAME.USER,
                        GlobalPageRouterConfig.ACTION_NAME.ACTION_LOGIN
                    )
                    return
                }
                useClick()
            }
            R.id.iv_close,R.id.fl_demo -> {
                TrackUtil.trackPopupClick(
                    AppTrackPage.AIPhoto,
                    "提示弹窗",
                    "活动协议",
                    "不同意"
                )
                closeDialog()
            }
        }
    }

    private fun closeDialog() {
        ExtendUtil.hideSoftInput(context, mEditText)
        dismiss()
    }

    private fun useClick() {
        if (ExtendUtil.isFastDoubleClick()) return //防止快速点击
        val code = mEditText.text.toString().trim()
        if (code.isEmpty()) {
            DialogUtil.showShortPromptToast(context, "请输入红包码")
            return
        }
        if (mPresenter == null) {
            mPresenter = AIRedPkgPresenter(context, this)
        }
        mPresenter?.requestAICode(code)
    }

    override fun showLoadingDialog(message: String?) {
        activity.showProgressDialog("")
    }

    override fun hideLoadingDialog() {
        activity.dismissProgressDialog()
    }

    override fun showErrorMsg(msg: String?) {
        DialogUtil.showShortPromptToast(context, msg ?: "红包码识别失败")
    }

    override fun onAICoverSuccess() {
        closeDialog()
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/fl_demo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/iv_demo"
            android:layout_width="194dp"
            android:layout_height="259dp"
            android:layout_gravity="center"
            android:scaleType="centerCrop"
            android:src="@drawable/reward_ai_code_bg" />

    </FrameLayout>

    <RelativeLayout
        android:id="@+id/rv_content"
        android:layout_marginTop="@dimen/margin_20dp"
        android:layout_width="match_parent"
        android:layout_height="@dimen/margin_118dp">


        <ImageView
            android:id="@+id/iv_input_bg"
            android:layout_width="match_parent"
            android:layout_height="118dp"
            android:scaleType="fitXY"
            android:src="@drawable/reward_ai_code_input_bg" />

        <ImageView
            android:id="@+id/iv_edit_bg"
            android:layout_width="242dp"
            android:layout_height="45dp"
            android:layout_marginStart="@dimen/margin_20dp"
            android:layout_marginTop="@dimen/margin_60dp"
            android:scaleType="centerCrop"
            android:src="@drawable/reward_ai_code_edit_bg" />

        <ImageView
            android:id="@+id/iv_use"
            android:layout_width="78dp"
            android:layout_height="45dp"
            android:layout_alignBottom="@+id/iv_edit_bg"
            android:layout_marginStart="@dimen/margin_15dp"
            android:layout_toRightOf="@+id/iv_edit_bg"
            android:scaleType="centerCrop"
            android:src="@drawable/reward_ai_code_use" />

        <com.mcd.library.ui.view.McdEditTextView
            android:id="@+id/et_code"
            android:layout_width="242dp"
            android:layout_height="45dp"
            android:layout_alignStart="@+id/iv_edit_bg"
            android:layout_alignParentBottom="true"
            android:background="@null"
            android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:gravity="left|center_vertical"
            android:imeOptions="actionNext"
            android:includeFontPadding="false"
            android:paddingBottom="@dimen/margin_24dp"
            android:maxLength="13"
            android:paddingStart="15dp"
            android:textColor="#F2E28C"
            android:textColorHint="#F2E28C"
            android:textSize="20sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/iv_close"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:scaleType="centerCrop"
            android:layout_alignParentRight="true"
            android:layout_marginEnd="10dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/reward_ai_code_exit" />

    </RelativeLayout>

</LinearLayout>

软键盘和EditText保持一定间距的实现思路,可以设置EditText 的 paddingBottom文章来源地址https://www.toymoban.com/news/detail-806910.html

到了这里,关于【Android】Dialog弹出软键盘时把布局顶起来的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp小程序点击输入框时阻止弹出软键盘

    如果不需要监听输入框的话可以直接看解决方式3  本人如此 解决方式1:@click更换成@tap 但如果同时子元素是开关等  各需要各的功能的话  解决方式2: 使用微信官方api阻止键盘弹出  hideKeyboard() 解决方式3: 最简单暴力百分百不弹出的方法在此  设置disabled

    2024年02月12日
    浏览(42)
  • Android 关于键盘弹出顶出输入框并不上移布局处理

    键盘弹出时想输入框上升到适应键盘高度,之前是直接取键盘高度设置底部margin实现的,但是在测试时发现如果在键盘弹出时切换输入法键盘高度可能发生变化,直接设置margin就不能满足了。 然后试了下网上的方法,在AndroidManifest.xml对应的activity里添加 android:windowSoftInputMo

    2024年02月16日
    浏览(25)
  • vue使用vant中的popup层,在popup层中加搜索功能后,input框获取焦点 ios机型的软键盘不会将popup顶起来的问题

    1.使用vant的popup弹出层做了一个piker的选择器,用户需要在此基础上增加筛选功能。也就是输入框 2.可是在ios机型中,input框在获取焦点以后,ios的软键盘弹起会遮盖住我们的popup层,导致体验不是很好 3.在大佬的解答及帮助下,采用窗口滚动的方式解决此方法 4.在获取焦点时 将整个

    2024年02月11日
    浏览(25)
  • uniapp(全端兼容) - 实现点击输入框时完美顶起键盘,获取键盘高度动态计算顶起距离,解决软键盘弹出时输入框被覆盖问题,uniapp微信小程序/移动端h5网页/安卓苹果app(示例代码,一键复制

    在uniapp小程序/h5网页网站/安卓苹果app/nvue等(全平台完美兼容)开发中,完美解决input输入框激活时软键盘从底部弹出遮挡问题,采用获取键盘高度动态计算每个平台下的弹出高度,彻底消除各平台端的弹出距离不一致、有差异的问题! 还能彻底解决软键盘顶不起来输入框的

    2024年03月14日
    浏览(138)
  • Android全屏弹出Dialog显示状态栏和导航栏的问题及解决方案

    在移动端开发中,有时候我们需要在Android应用中弹出一个全屏的Dialog。然而,当我们尝试实现这样的Dialog时,可能会遇到一个问题:状态栏和导航栏在全屏Dialog中仍然可见,这可能会影响用户体验。本文将介绍如何解决这个问题,并提供相应的源代码。 问题描述: 当我们使

    2024年02月05日
    浏览(32)
  • h5键盘弹起底部菜单(按钮)被顶起-vue自定义指令解决

            开发H5中测试过程中发现在安卓手机上,input/textarea 获取焦点 软键盘弹出 会让absolute/fixed或者使用flex局部 固定在底部的元素(固定底部栏)顶起来问题;在搜索后发现安卓上在键盘弹起的时候浏览器   body height 100%   其实只有键盘以上范围,这里决解方法有很多可

    2024年02月12日
    浏览(42)
  • uniapp软键盘谈起遮住输入框和头部被顶起的问题解决

     推荐: pages.json中配置如下可解决头部被顶起和表单被遮住的问题。       {             \\\"path\\\": \\\"pages/debug/protocol/tagWord\\\",             \\\"style\\\": {                 \\\"app-plus\\\": {                     \\\"softinputMode\\\": \\\"adjustResize\\\"                 }             }  

    2024年02月13日
    浏览(29)
  • Flutter 解决App登录页面软键盘遮挡住登录按钮或顶起底部控件的问题

    问题点 最终效果图 问题点: 当前使用的是 Column 布局,弹窗软键盘后页面超出范围。 A RenderFlex overflowed by 0.533 pixels on the bottom. 解决方式 在 Scaffold 或者 CupertinoPageScaffold 中设置 resizeToAvoidBottomInset 为false 不修改 resizeToAvoidBottomInset 属性的话,可以使用 ListView 、 SingleChildScrol

    2024年02月04日
    浏览(43)
  • Android 全局监听软键盘弹起隐藏 动态修改布局并适配无限循环的问题

    要在 Android 应用中全局检测软键盘的弹起,您可以使用 ViewTreeObserver.OnGlobalLayoutListener 监听器来监听布局树的变化。当软键盘弹起或隐藏时,布局树会发生变化,因此您可以在监听器中捕获这些变化。 在上面的代码中, rootView 是您布局的根视图,您需要将其替换为您实际布局

    2024年02月11日
    浏览(30)
  • vue helloworld.vue 点击按钮弹出 dialog,并给dialog传值

    3.1 导入组件 3.2 声明组件 3.3  插入组件 并给组件 命名 ref  3.4 做按钮 3.5  做按钮方法 点击后给指定的组件ref中的变量赋值 4.1 让标题等于 传来的值 4.2 :visible.sync=\\\"dataAnalysisvalue\\\"--DataAnalysisVue.Vue和helloworld.vue值双向绑定  5.1 主 5.2 子

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包