微信输入文字和更多切换时不改变下面layout大小

首先在Manifest中找到该Activity,设置属性:android:windowSoftInputMode="adjustResize|stateAlwaysHidden"
在XML文件中搞一个自定义Layout如:
<cn.example.view.TestSoftKeyboard
android:id="@+id/test_view"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
然后定义这个Layout:
public class TestSoftKeyboard extends LinearLayout{

private Listener mListener;

public void setListener(Listener listener){
        this.mListener = listener;
    }

public interface Listener {
        public void onSoftKeyboardShown(boolean isShowing, int softKeyboardHeight);
    }

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = MeasureSpec.getSize(heightMeasureSpec);
        Rect rect = new Rect();
        Activity activity = (Activity)getContext();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
        int statusBarHeight = rect.top;
        int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
        int diff = (screenHeight - statusBarHeight) - height;
        if(mListener != null){
            mListener.onSoftKeyboardShown(diff>128, diff);
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}
最后在Activity中:
public class TestActivity extends Activity implements cn.example.TestSoftKeyboard.Listener{
……
mTestView = (TestView) findViewById(R.id.test_view);
mTestView .setListener(this);
……
    @Override
    public void onSoftKeyboardShown(boolean isShowing, int softKeyboardHeight) {
        if (isShowing) {
            mAfterMeasureSize = softKeyboardHeight;
            Log.i("Test", "OnSoftKeyboardShown showing softKeyboardHeight :" + softKeyboardHeight);
        } else {
            mPreMeasureSize = softKeyboardHeight;
            Log.i("Test", "OnSoftKeyboardShown dismiss softKeyboardHeight :" + softKeyboardHeight);
        }
        if(mAfterMeasureSize - mPreMeasureSize > 150){
           int h = mAfterMeasureSize - mPreMeasureSize;
        }
    }

}
上面的h就是软键盘的高度了,如果你的Activity设置了Title,记得用h这个值,否则,在TestSoftKeyboard这个类中得到的diff就是软键盘的高度了。

时间: 2024-08-11 09:42:10

微信输入文字和更多切换时不改变下面layout大小的相关文章

使用Fragment+ViewPager,仿微信实现多页Tab切换

我们今天实现类似微信的首页的滑动Tab效果:          郭霖有一篇博客http://blog.csdn.net/guolin_blog/article/details/13171191,讲过如何实现,但是他的demo不能通过滑动切换,只能通过点击按钮切换. 通过viewpager,我们可以完全实现微信的效果. 先看看我的实现效果:      主页面代码 package com.example.fragmentdemo; import java.util.ArrayList; import

CKEditor5 输入文字时拼音和汉字同时输入问题

在使用 CKEditor5 + vue 时,出现输入文字时,拼音和文字一起输入到编辑器到问题.与之前项目中使用 ckeditor 的区别是,这次项目是在 python 架构下局部引入 ckeditor ,写法如下: html: <ckeditor id="editor" class="notice-editor" :editor="editor" :config="editorConfig" @ready="o

MIS的趋势必定是围绕机器取代人手,分工越来越细(小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1、2个人手,SQL发明以后,程序员的工作更多了)

最后,我还想简略的谈谈MIS及MIS快速开发工具的未来. MIS的趋势必定是围绕机器取代人手,分工越来越细.比如:现在有些小型的咖啡厅里的财务子系统就简单到不需要使用者有会计知识,相当于省了会计人手:有些小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1.2个人手.也就是说,企业管理系统,未来会逐渐把非核心的功能外包出去,让更专业的公司去做. 如果以为我的这款工具仅仅作为快速开发工具,那就错了.现在进销存.HIS.ERP.CRM等等MIS软件,要么走通用化,要么走定制化.而我认为未来要走组装

解决linux mint19.3 下微信输入黑块问题

linux中,还是回到了mint怀抱.在使用deepin 的微信时,发现微信输入黑框,但发送的文字在那边可以正常显示. 解决方式: 安装wps后,下载wps缺失的字体包(百度直接搜索 linux wps字体 就可以看到 .将字体包(zip) 解压后的*.ttf 文件全部放到 ~/.fonts(没有则建立一个)中. sudo killall WeChat.exe  #杀掉微信进程 重启微信试试,如果输入依然是黑块则: sudo dpkg -P deepin.com .wechat #卸载 sudo

微信支付v3发布到iis时的证书问题

找了问题半天,调试没有问题,但是放到网站上就报错.最后解决方法. 一开始报“出现了内部错误” 解决方法是 方法一 var cer = new X509Certificate(certpath, password,X509KeyStorageFlags.MachineKeySet); 方法二 iis 找到部署的站点应用连接池,右键高级设置,找到“加载用户配置文件”改为true.window service2008 默认为false的. 解决后报另一个错误 基础连接已关闭 连接被意外关闭 其实是没访

在窗体上创建自己的光标并输入文字

我们知道在文本框等可以接收输入的组件中,我们可以看到闪烁的光标,并可以输入文字,如果我们在,比如窗体上时,因为不支持输入,也无法显示闪烁的光标,那我们 有办法做自己的输入吗?当然可以,下面我们演示在Form上来输入文字. 用到的API函数如下 GetTextMetrics:获取程序当前的字体信息,存放到TEXTMETRIC结构中 CreateCaret:为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特定的窗口.插入标记的形状.可以是线.块或位图 ShowCaret:显示光标 Se

UITextView仿微信输入

UITextView仿微信输入 输入和删除文字的时候不会出现抖动,也不会出现一行文字显示一半的情况,代码中部分数据用的是死数据,用的时候要灵活运用,适当调整一下! #define textFont [UIFont systemFontOfSize:16] #import "ViewController.h" @interface ViewController ()<UITextViewDelegate> @property (nonatomic, weak) UITextV

移动端开发注册、登陆input常用事件(input输入文字触发事件)

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>移动端开发注册.登陆input常用事件(input输入文字触发事件)</title> <meta name="keywords" content="

vc+如何实现模拟键盘输入,自动输入文字(创世纪篇)

键盘对于每个操作电脑的人员来说是最熟悉不过的了.键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键:按下后虽然看不到字符但会产生控制作用的按键,如回车键.光标键等,我们称之为控制键. 对于vc+程序员来说,键盘上的每个按键都一样,无非是不同按键产生的键盘扫描码不同.在不同的操作系统下,键盘扫描码常常被转换为不同的编码以方便应用程序调用,比如在Windows系统下的ASCII码,在Windows系统下的虚拟键盘码等等. 有时我们希望能以程序