android 实现按钮浮动在键盘上方的实例代码
时间:2022-07-27
本文章向大家介绍android 实现按钮浮动在键盘上方的实例代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大家好,我是梦辛工作室的灵,最近在帮客户修改安卓程序时,有要求到一个按钮要浮动在键盘的上方,下面大概讲一下实现方法:
其实很简单,分三步走
第一步 获取当前屏幕的高度
Display defaultDisplay = mcontext.getWindowManager().getDefaultDisplay();
Point point = new Point();
defaultDisplay.getSize(point);
height = point.y;
第二步 获取当前屏幕可见区域的高度,用于判断当前键盘是否隐藏或显示
public void setFloatView(View root,View floatview){
this.root = root; //根节点
listener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
mcontext.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
int heightDifference = height - (r.bottom - r.top); // 实际高度减去可视图高度即是键盘高度
boolean isKeyboardShowing = heightDifference height / 3;
if(isKeyboardShowing){
//键盘显示
}else{
//键盘隐藏
}
}
};
root.getViewTreeObserver().addOnGlobalLayoutListener(listener);
}
第三步 当键盘隐藏时让按钮 动画移动至原有位置,当前键盘显示时让按钮动画移动至当前键盘的高度上方
if(isKeyboardShowing){
//键盘显示
floatview.animate().translationY(-heightDifference).setDuration(0).start();
}else{
//键盘隐藏
floatview.animate().translationY(0).start();
}
然后我为了方便封装了一个工具类 FloatBtnUtil,很好用,下面是代码
/**
* 梦辛灵 实现按钮浮动工具
*/
public class FloatBtnUtil {
private static int height = 0;
private Activity mcontext;
private ViewTreeObserver.OnGlobalLayoutListener listener;
private View root;
public FloatBtnUtil(Activity mcontext){
this.mcontext = mcontext;
if (height == 0){
Display defaultDisplay = mcontext.getWindowManager().getDefaultDisplay();
Point point = new Point();
defaultDisplay.getSize(point);
height = point.y;
}
}
public void setFloatView(View root,View floatview){
this.root = root; //视图根节点 floatview // 需要显示在键盘上的View组件
listener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
mcontext.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
int heightDifference = height - (r.bottom - r.top);
boolean isKeyboardShowing = heightDifference height / 3;
if(isKeyboardShowing){
floatview.animate().translationY(-heightDifference).setDuration(0).start();
}else{
floatview.animate().translationY(0).start();
}
}
};
root.getViewTreeObserver().addOnGlobalLayoutListener(listener);
}
public void clearFloatView(){
if (listener != null && root != null)
root.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
}
}
下面是使用代码:
private void initFloatBtn() {
FloatBtnUtil floatBtnUtil = new FloatBtnUtil(this);
LinearLayout lin_bottom = (LinearLayout) this.findViewById(R.id.lin_bottom);
LinearLayout lin_root = (LinearLayout)this.findViewById(R.id.lin_root);
floatBtnUtil.setFloatView(lin_root,lin_bottom);
}
总结
到此这篇关于android 实现按钮浮动在键盘上方的文章就介绍到这了,更多相关android 实现按钮浮动在键盘上方内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
- 每天学习一点儿算法--二分查找
- IntelliJ IDEA两种keymap快捷键方案Mac OS X和Mac OS X 10.5+的区别
- Apache Avro是什么干什么用的(RPC/序列化)
- 萌新刷题(十二)二叉树的前序遍历
- 轻松掌握ES6中集合Set的用法
- 萌新刷题(十三)买卖股票的最佳时机
- 萌新刷题(十一)有效数字
- Hive性能优化统计每日IP CREATE TABLE ip_2014_12_29 AS SELECT COUNT(DISTINCT ip) AS IP FROM logdfs WHERE logda
- 算法中描述复杂度的大O是什么意思?
- 优化Mysql:3个简单的调整
- Redis的5个常见应用场景
- Mysql 索引你了解多少?
- Mysql 8 新特性 window functions 有什么用?
- 用两张图告诉你,为什么你的App会卡顿?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 「Mysql索引原理(二)」Mysql高性能索引实践,索引概念、BTree索引、B+Tree索引
- 「Mysql索引原理(一)」1.存储引擎简介
- 弄它!!!小小BGP!理论加实验分分钟拿下!带你体验大网的世界!
- 搞它!!!Linux常用命令合集
- 搞它!!!深入了解安装及管理程序,学会使用rpm工具 虚拟机实验下载安装Apache
- (转)java中equals和等号(==)的区别浅谈
- 搞它!!!linux账号和权限管理
- 搞它!!!详细介绍linux磁盘管理和文件系统
- 详谈JAVA中的file类与IO流
- Java中的StringTokenizer类
- 搞它!!!Linux系统安全及应用以弱口令检测
- 搞它!!!linux配置本地yum源
- JAVA网络编程TCP通信
- 使用ExecutorService实现线程池
- 搞它!!!linux服务器硬件及RAID 配置实战