Android软键盘及输入法顶起TabBar的解决方法

ListView搜索的时候遇到了这个问题,软键盘总是自动弹出而且把底部的TabBar顶到屏幕中部,这里是两个问题:

1、软键盘顶起TabBar

2、进入该界面时软键盘自动弹起。

 

      关于问题2,之前遇到过进入一个表单ActivityEditText控件自动获得焦点弹出软键盘,当时的解决方法是在EditText之前加入了一个不可见层来获得焦点:(该方法是解决普通布局中自动弹出软键盘的方法)。

<LinearLayout
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

       

        当时的问题能够得到解决,这次的问题在于我的EditText设置的属性inputType="number" ,但是自动弹出的是英文键盘,所以其实不是EditText获得的焦点,是什么不得而知。这个方法没有解决我的问题2。先放起来解决问题一。

 

       再来说问题一,解决方法在网上也找到了很多说法,其实最终只是要在AndroidManifest.xml
设置一下相应activityandroid:windowSoftInputMode
这个属性,是设置活动主窗口与软键盘窗口如何交互的问题。

 

关注两个属性值:

"stateHidden" :当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity


"adjustPan" : Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

 

 如果只是出现软键盘顶起的情况,下面的代码应该能够解决问题:

android:windowSoftInputMode="stateVisible|adjustPan" 


如果像我一样同时遇到这两个问题,那就要用下面的属性了:

android:windowSoftInputMode="adjustPan|stateHidden"
要实现 uniapp 中输入框在 tabbar 上方,并且跟随软键盘的效果,可以按照以下步骤进行: 1. 在 App.vue 中设置全局的样式: ``` <style> .page { height: 100%; display: flex; flex-direction: column; } .content { flex: 1; overflow-y: auto; padding-bottom: 50px; } .tabbar { position: fixed; bottom: 0; left: 0; right: 0; z-index: 999; } </style> ``` 2. 在需要使用输入框的页面中,添加如下代码: ``` <template> <div class="page"> <div class="content"> <!-- 此处添加页面内容 --> <div style="height: 2000px;"></div> </div> <div class="tabbar"> <!-- 此处添加 tabbar --> </div> <div style="position: fixed;bottom: 0;left: 0;right: 0;"> <input type="text" placeholder="请输入内容" style="height: 50px;width: 100%;margin: 0;padding: 0;border: none;background-color: #f8f8f8;"> </div> </div> </template> ``` 3. 在页面中添加软键盘弹起的事件监听: ``` onShow() { uni.createSelectorQuery().select('input').boundingClientRect((rect) => { let windowHeight = uni.getSystemInfoSync().windowHeight let inputHeight = rect.height let tabbarHeight = 50 // 假设 tabbar 高度为 50px let contentHeight = windowHeight - inputHeight - tabbarHeight this.setData({ contentHeight }) }).exec() } ``` 4. 在页面中动态设置内容区域的高度: ``` <template> <div class="page"> <div class="content" :style="`height: ${contentHeight}px`"> <!-- 此处添加页面内容 --> <div style="height: 2000px;"></div> </div> <div class="tabbar"> <!-- 此处添加 tabbar --> </div> <div style="position: fixed;bottom: 0;left: 0;right: 0;"> <input type="text" placeholder="请输入内容" style="height: 50px;width: 100%;margin: 0;padding: 0;border: none;background-color: #f8f8f8;"> </div> </div> </template> <script> export default { data() { return { contentHeight: 0 } }, onShow() { uni.createSelectorQuery().select('input').boundingClientRect((rect) => { let windowHeight = uni.getSystemInfoSync().windowHeight let inputHeight = rect.height let tabbarHeight = 50 // 假设 tabbar 高度为 50px let contentHeight = windowHeight - inputHeight - tabbarHeight this.contentHeight = contentHeight }).exec() } } </script> ``` 这样就可以实现 uniapp 中输入框在 tabbar 上方,并且跟随软键盘的效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值