获取软键盘高度和生成9-patch
来源:互联网 发布:网络 编辑:程序博客网 时间:2024/06/05 08:03
最近在做一个类似聊天的功能,所以需要获取到软键盘的高度来控制界面的显示,同时有一些手机上面有虚拟按键,在界面布局的时候需要注意。下面的代码就是一段获取手机软键盘高度的办法。
Rect r = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(r); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); //屏幕的高度,不包含虚拟按键 int screenHeight = metrics.heightPixels; //屏幕真实的高度,包含虚拟按键 getWindowManager().getDefaultDisplay().getRealMetrics(metrics); //虚拟按键的高度 int virtualHight = metrics.heightPixels - screenHeight; int statusBarHeight=getStatusBarHeight(context); // 在不显示软键盘时,heightDiff等于状态栏的高度 // 在显示软键盘时,heightDiff会变大,等于软键盘加状态栏的高度。 // 所以heightDiff大于状态栏高度时表示软键盘出现了, // 这时可算出软键盘的高度,即heightDiff减去状态栏的高度 if (heightDiff > statusBarHeight) { keyboardHeight = heightDiff - statusBarHeight; } if (isShowKeyboard) { // 如果软键盘是弹出的状态,并且heightDiff小于等于状态栏高度, if (heightDiff <= statusBarHeight) { // 说明这时软键盘已经收起 isShowKeyboard=false; } } else { // 如果软键盘是收起的状态,并且heightDiff大于状态栏高度, if (heightDiff > statusBarHeight) { // 说明这时软键盘已经弹出 isShowKeyboard=true; } }
有一个 ViewTreeObserver 的类,可以用来监听view状态的变化,包括焦点改变、开始绘制、触摸事件等等的变化,如果要想控制某个控件的高度,可以利用这个类来实现,如下所示:
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { /** * Callback method to be invoked when the global layout state or the visibility of views * within the view tree changes */ @Override public void onGlobalLayout() { //这里放你要实现的效果。 } });
下面是获取手机状态栏高度的办法
// 获取手机状态栏高度 public static int getStatusBarHeight(Context context) { Class<?> c = null; Object obj = null; Field field = null; int x = 0, statusBarHeight = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x=Integer.parseInt(field.get(obj).toString()); statusBarHeight = context.getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return statusBarHeight; }
对于聊天框,一开始想的是自定义控件的办法,后来在网上找到了9-patch,可以自动拉伸图片,需要用到的是.png的图片,可以找美工切好图,在Android studio上,右键选择图片,可以自动生成xx.9.png的文件,如下图:
在\sdk\tools\
下面有 draw9patch 命令,如果你配置了路径了,可以直接在命令行使用draw9patch打开。至于如何配置路径,这里就不赘述了。打开之后导入图片就能生成 9-Patch ,如下图:
下面就是最终效果了,需要注意的是,生成的 xx.9.png 文件需保存在 drawable 的目录下面,然后就可以直接调用了。
在工具上,有边线可以直接拖动,多试验几次找到最合适自己的,如图所示黑色阴影是要显示的区域的边距,两条绿色区域的交叉处就是最后会被拉伸的地方,右边就是最后被拉伸的效果图。
0 0
- 获取软键盘高度和生成9-patch
- 获取软键盘高度
- Android中获取软键盘状态和软键盘高度
- 如何获取Android软键盘状态和软键盘高度
- iOS 获取软键盘高度
- 获取android软键盘高度
- 获取android软键盘高度
- android 获取软键盘的高度
- Android获取软键盘的高度
- 精确获取android软键盘高度
- 深入理解高度。获取屏幕、webview、软键盘高度
- cordova—— 监听手机软键盘出现和隐藏事件及获取软键盘的高度
- 监听软键盘 高度和关闭状态
- Android监听键盘是否弹出和获取软键盘的高度
- Android修炼之道—获取软键盘的高度
- Android修炼之道—获取软键盘的高度
- wp7 软键盘高度
- android中监听软键盘的弹出与隐藏,并获取软键盘的高度
- FatFS文件系统 (每条指令讲的都很细)
- 点缀-----未读信息小圆点的简洁实现
- 在Linux/Unix系统下用iconv命令处理文本文件中文乱码问题
- linux命令
- JAVA中synchronized和lock详解 (r)
- 获取软键盘高度和生成9-patch
- Codeforces Round #333 (Div. 2) E. Kleofáš and the n-thlon (概率dp)
- ios 使用Quartz 2D画虚线 - little_star
- CCF:201604-1 折点计数(C++)
- 查看jdk源码
- android对内存的管理
- JAVA多线程程序设计23个要点 (r)
- C++面试题:介绍一下STL如何实现vector
- 神舟战神如何解决U盘启动问题