软键盘监听以及对导航栏的处理

本文介绍了在直播评论场景下,如何处理布局随软键盘移动的问题。通过使用第三方库PreventKeyboardBlockUtil监听软键盘的显示隐藏,并对代码进行调整以实现布局的动态移动。同时,注意到该库未处理导航栏,故需自定义封装来解决导航栏的状态。目前,这种方法已在华为和小米的全面屏手机上测试,但需进一步验证在其他设备上的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:直播评论时,需要部分布局随软键盘移动,直播画面等不动

解决方案:监听软键盘显示隐藏,代码设置控件移动

使用第三方框架进行软件盘监听:com.github.yoyoyaobin:PreventKeyboardBlockUtil

但是这个框架不对导航栏进行处理,需要在上层重新封装。

import android.app.Activity;
import android.content.res.Configuration;
import android.view.View;

import com.blankj.utilcode.util.KeyboardUtils;
import com.hyb.library.KeyboardHeightObserver;
import com.hyb.library.KeyboardHeightProvider;

/**
 * @author chenpin
 */
public class KeyboardManager {
    private int keyBoardHeight = 0;
    /**用于在UI线程启动监听*/
    private View mBtnView;
    private Activity mActivity;
    private KeyboardListener mKeyboardListener;
    private KeyboardHeightProvider keyboardHeightProvider;
    /**记录界面打开时,导航栏是否显示*/
    private boolean firstNavigationShow;
    /**记录手机全面屏进来时,会赋值软键盘高度为负数*/
    private int firstKeyboardHeight;

    public KeyboardManager(Activity activity,View view){
        mActivity = activity;
        if(keyboardHeightProvider != null){
            keyboardHeightProvider.recycle();
            keyboardHeightProvider = null;
        }
        this.mBtnView = view;
        keyboardHeightProvider = new KeyboardHeightProvider(activity);
        firstNavigationShow = NavigationManager.hasNavigationBar(activity);
    }

    public void setmKeyboardListener(KeyboardListener mKeyboardListener) {
        this.mKeyboardListener = mKeyboardListener;
    }

    public void register(){
        keyboardHeightProvider.setKeyboardHeightObserver(new KeyboardHeightObserver() {
            @Override
            public void onKeyboardHeightChanged(int height, int orientation) {
                if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                    return;
                }
                //如果为负数,那么是第一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值