Android优雅的方式解决软键盘遮挡按钮问题
发布时间 - 2026-01-10 22:44:05 点击率:次前言

比如在进行登录的操作中,用户输入完密码之后,肯定是想直接点击登录按钮的。返回键隐藏软键盘这样的体验肯定很糟糕,程序员,遇到问题解决问题。
实现1
xml
<ScrollView android:id="@+id/scrollview" android:layout_width="match_parent" android:layout_height="wrap_content" android:fadingEdge="none" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_horizontal" android:layout_marginTop="20dp" android:src="@mipmap/ic_loginhead"/> <EditText android:id="@+id/et_usernamelogin_username" style="@style/customEditText" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginTop="10dp" android:background="@null" android:hint="请输入已验证手机" android:inputType="number" android:lines="1" android:maxLength="11"/> <ImageView android:layout_width="match_parent" android:layout_height="2px" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:background="@color/pating_line"/> <EditText android:id="@+id/et_usernamelogin_password" style="@style/customEditText" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginTop="20dp" android:background="@null" android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_?" android:hint="请输入密码" android:inputType="textPassword"/> <ImageView android:layout_width="match_parent" android:layout_height="2px" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:background="@color/pating_line"/> <Button android:id="@+id/btn_usernamelogin_dologin" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:layout_marginTop="30dp" android:background="@drawable/btn_selecter" android:enabled="false" android:text="登录" android:textColor="@color/white" /> </LinearLayout> </ScrollView>
java
mScrollView=(ScrollView)view.findViewById(R.id.scrollview);
usernamelogin_username.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
changeScrollView();
returnfalse;
}
});
usernamelogin_password.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
changeScrollView();
returnfalse;
}
});
/**
*使ScrollView指向底部
*/
privatevoidchangeScrollView(){
newHandler().postDelayed(newRunnable(){
@Override
publicvoidrun(){
mScrollView.scrollTo(0,mScrollView.getHeight());
}
},300);
}
实现2
xml同上
anim下新建gone.xml
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="500" android:repeatCount="0"/>
visiable.xml
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="500" android:repeatCount="0"/>
或者直接在代码中
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.KeyEvent;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.animation.Animation;
importandroid.view.animation.AnimationSet;
importandroid.view.animation.ScaleAnimation;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.ImageView;
publicclassMainActivityextendsAppCompatActivity{
privateImageViewmHead;//头部ImageView
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHead=(ImageView)findViewById(R.id.iv_head);
finalButtonbtn=(Button)findViewById(R.id.btn_usernamelogin_dologin);
finalEditTextet_pass=(EditText)findViewById(R.id.et_usernamelogin_password);
finalEditTextet_name=(EditText)findViewById(R.id.et_usernamelogin_username);
/**
*当输入被点击
*/
et_name.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
start();
returnfalse;
}
});
btn.setEnabled(false);
btn.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
}
});
}
privatevoidstart(){
AnimationSetanimationSet=newAnimationSet(true);
ScaleAnimationscaleAnimation=newScaleAnimation(
1,0.1f,1,0.1f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
scaleAnimation.setDuration(500);
animationSet.addAnimation(scaleAnimation);
animationSet.setFillAfter(true);
animationSet.setFillBefore(false);
animationSet.setRepeatCount(0);//设置重复次数
mHead.startAnimation(scaleAnimation);
newHandler().postDelayed(newRunnable(){
@Override
publicvoidrun(){
mHead.setVisibility(View.GONE);
}
},500);
}
/**
*菜单、返回键响应
*/
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.KEYCODE_BACK){
if(mHead.getVisibility()==View.GONE){
AnimationSetanimationSet=newAnimationSet(true);
ScaleAnimationscaleAnimation=newScaleAnimation(
0.1f,1f,0.1f,1f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
scaleAnimation.setDuration(500);
animationSet.addAnimation(scaleAnimation);
animationSet.setFillAfter(true);
animationSet.setFillBefore(false);
mHead.startAnimation(scaleAnimation);
mHead.setVisibility(View.VISIBLE);
}else{
finish();
}
}
returnfalse;
}
}
效果呢:
以上所述是小编给大家介绍的Android优雅的方式解决软键盘遮挡按钮问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 软键盘遮挡按钮
# Android开发之WebView输入框提示解决办法
# Android开发软键盘遮挡登陆按钮的完美解决方案
# Android软键盘遮挡的四种完美解决方案
# Android WebView软键盘遮挡输入框方案详解
# 请输入
# 小编
# 在此
# 给大家
# 解决问题
# 如在
# 所述
# 给我留言
# 感谢大家
# 直接点击
# 很糟糕
# 疑问请
# 有任何
# digits
# et_usernamelogin_password
# drawable
# btn_usernamelogin_dologin
# textPassword
# Button
# pating_line
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何在阿里云服务器自主搭建网站?
Android滚轮选择时间控件使用详解
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
网页设计与网站制作内容,怎样注册网站?
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
如何正确选择百度移动适配建站域名?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
JavaScript如何实现错误处理_try...catch如何捕获异常?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
香港服务器如何优化才能显著提升网站加载速度?
如何在云指建站中生成FTP站点?
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何在阿里云香港服务器快速搭建网站?
Laravel怎么清理缓存_Laravel optimize clear命令详解
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何在宝塔面板中创建新站点?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何在Tomcat中配置并部署网站项目?
如何选择可靠的免备案建站服务器?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
动图在线制作网站有哪些,滑动动图图集怎么做?
Laravel如何实现本地化和多语言支持?(i18n教程)
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel如何实现API速率限制?(Rate Limiting教程)
浅谈Javascript中的Label语句
Laravel如何实现一对一模型关联?(Eloquent示例)
高端网站建设与定制开发一站式解决方案 中企动力
Laravel怎么判断请求类型_Laravel Request isMethod用法
实例解析angularjs的filter过滤器
简历在线制作网站免费版,如何创建个人简历?
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
JS弹性运动实现方法分析
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
如何用低价快速搭建高质量网站?
浅析上传头像示例及其注意事项
如何在万网ECS上快速搭建专属网站?
如何在阿里云虚拟主机上快速搭建个人网站?
如何获取上海专业网站定制建站电话?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Android利用动画实现背景逐渐变暗

