Android EditText悬浮在输入法之上
Android EditText悬浮在输入法之上
使用
android:windowSoftInputMode="adjustResize"会让界面整体被顶上去,很多时候我们不需要这样的情况出现,这里给出另一个方案.
**思路:监听输入法的状态,然后动态的滚动
EditText所在的ViewGroup或者View**
1. Android Manifest.xml
<activity
android:name=".InputActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:configChanges="keyboard|keyboardHidden|orientation"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"> //非adjustResize
</activity>
2. 布局文件
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_saber_q"
tools:context="didikee.com.demoapk.InputActivity">
<LinearLayout
android:id="@+id/rl_inputdlg_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#00000000"
android:orientation="horizontal">
<EditText
android:id="@+id/input_message"
android:layout_width="0dp"
android:layout_height="@dimen/dp30"
android:layout_gravity="center|left"
android:layout_marginLeft="@dimen/dp12"
android:paddingLeft="@dimen/dp2"
android:paddingRight="@dimen/dp2"
android:layout_weight="1"
android:background="@drawable/shape_cricle_gray_solid_white"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="left"
android:imeOptions="actionSend"
android:maxLength="32"
android:singleLine="true"
android:text=""
android:textColor="@color/dark_text"
android:textSize="20sp"/>
<TextView
android:id="@+id/confrim_btn"
android:layout_width="@dimen/dp50"
android:layout_height="@dimen/dp30"
android:layout_gravity="center|right"
android:layout_marginLeft="@dimen/dp11"
android:layout_marginRight="@dimen/dp12"
android:background="@drawable/shape_cricle_solid_orange"
android:gravity="center"
android:text="发送"
android:textColor="@color/white"/>
</LinearLayout>
</RelativeLayout>
3. Activity里设置监听,滚动 input 视图
public class InputActivity extends AppCompatActivity {
private RelativeLayout rLayout;
private View mInputLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input);
mInputLayout = findViewById(R.id.rl_inputdlg_view);
rLayout = ((RelativeLayout) findViewById(R.id.root));
//输入法到底部的间距(按需求设置)
final int paddingBottom = DisplayUtil.dp2px(this, 5);
rLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
rLayout.getWindowVisibleDisplayFrame(r);
//r.top 是状态栏高度
int screenHeight = rLayout.getRootView().getHeight();
int softHeight = screenHeight - r.bottom ;
Log.e("test","screenHeight:"+screenHeight);
Log.e("test","top:"+r.top);
Log.e("test","bottom:"+r.bottom);
Log.e("test", "Size: " + softHeight);
if (softHeight>100){//当输入法高度大于100判定为输入法打开了
rLayout.scrollTo(0, softHeight+paddingBottom);
}else {//否则判断为输入法隐藏了
rLayout.scrollTo(0, paddingBottom);
}
}
});
}
}
效果图:
1. 不做处理前:

2. 处理后的效果:

Android EditText悬浮在输入法之上的更多相关文章
- 89、Android EditText 悬浮停靠
package com.willen.topFloatDemo; import android.content.Context; import android.os.Handler; import a ...
- Android Edittext聚焦时输入法挡住了EditText输入框的两种解决方案
方案一.把整个布局文件用ScrollView套住.这样当你聚焦时虽然输入法也能够挡住一些输入框,但是你可以通过手动滑动看被挡住的内容. 方案二.在Activity中设置android:windowSo ...
- Android EditText 不弹出输入法
当第一次进入一个activity的时候 一般是第一个edittext是默认选中的,但是该死的软键盘也一起弹出来了 那是相当的不美观哈!(#‵′)凸.为此, 本大人就去寻找在刚进入这个activity ...
- Android EditText不弹出输入法焦点问题的总结
转自:http://mobile.51cto.com/aprogram-403138.htm 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...
- Android EditText自动弹出输入法焦点
http://mobile.51cto.com/aprogram-403138.htm 1. 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...
- Android EditText默认不弹出输入法,以及获取光标,修改输入法Enter键的方法
一.Android EditText默认不弹出输入法的办法:1. 在AndroidManifest.xml中将需要默认隐藏键盘的Activity中添加属性即可(常用此方法) android:windo ...
- Android EditText不弹出输入法总结,焦点问题的总结
看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMod ...
- Android WindowManager悬浮窗:不需要申请权限实现悬浮
Android WindowManager悬浮窗:不需要申请权限实现悬浮 附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在And ...
- Android EditText属性
1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 ( ...
随机推荐
- Jsonp跨域
Jsonp.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Node.js-中文分词【1】-node-segment
node-segment是基于盘古分词写的Node.js中文分词模块,鉴于盘古分词给我留下的好印象,我们在Node.js上选择了它 一.安装node-segment npm install -g se ...
- docker入门-学习笔记
docker可以类比成window下的VMware或者virtualbox软件.docker有两个基本的概念:容器(container)和镜像(image),分别对应为VMware中的系统镜像和系统镜 ...
- scikit-learn包的学习资料
http://scikit-learn.org/stable/modules/clustering.html#k-means http://my.oschina.net/u/175377/blog/8 ...
- 【oracle】union、union all、intersect、minus 的用法及区别
一.union与union all 首先建两个view create or replace view test_view_1 as as c from dual union as c from dua ...
- ElasticSearch问题记录
1.Young GC导致集群master重新选举,一台server fail [2016-12-10 07:38:24,546][WARN ][transport ] [BFRD_1] Receive ...
- C# 中对 ArrayList 的排序
ArrayList 元素 //目录条目类 public class FolderItem { public string filename; public string filetype; publi ...
- 一张图系列——从CreateProcess到main函数的过程
整体过程如下: 需要说明两点: 1.在XP中,新进程主线程的启动,会先执行一个用户态的APC,会执行ntdll!LdrInitializeThunk进行程序执行前的一些列初始化操作.其中很重要任务就是 ...
- Django动态渲染多层菜单
为后续给菜单设置权限管理方便,通过给页面模版菜单动态渲染,通过数据菜单表进行匹配需要渲染的菜单 #Django表结构 class Menus(models.Model): name = models. ...
- iOS AFNetWorking 3.1 的网络解析
AFNetworking 3.0中废弃: AFURLConnectionOperation AFHTTPRequestOperation AFHTTPRequestOperationManager ...