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悬浮在输入法之上的更多相关文章

  1. 89、Android EditText 悬浮停靠

    package com.willen.topFloatDemo; import android.content.Context; import android.os.Handler; import a ...

  2. Android Edittext聚焦时输入法挡住了EditText输入框的两种解决方案

    方案一.把整个布局文件用ScrollView套住.这样当你聚焦时虽然输入法也能够挡住一些输入框,但是你可以通过手动滑动看被挡住的内容. 方案二.在Activity中设置android:windowSo ...

  3. Android EditText 不弹出输入法

    当第一次进入一个activity的时候  一般是第一个edittext是默认选中的,但是该死的软键盘也一起弹出来了 那是相当的不美观哈!(#‵′)凸.为此, 本大人就去寻找在刚进入这个activity ...

  4. Android EditText不弹出输入法焦点问题的总结

    转自:http://mobile.51cto.com/aprogram-403138.htm 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...

  5. Android EditText自动弹出输入法焦点

    http://mobile.51cto.com/aprogram-403138.htm 1. 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...

  6. Android EditText默认不弹出输入法,以及获取光标,修改输入法Enter键的方法

    一.Android EditText默认不弹出输入法的办法:1. 在AndroidManifest.xml中将需要默认隐藏键盘的Activity中添加属性即可(常用此方法) android:windo ...

  7. Android EditText不弹出输入法总结,焦点问题的总结

    看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMod ...

  8. Android WindowManager悬浮窗:不需要申请权限实现悬浮

     Android WindowManager悬浮窗:不需要申请权限实现悬浮 附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在And ...

  9. Android EditText属性

    1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 ( ...

随机推荐

  1. 【Centos】修改网卡名字&随之出现的问题

    自从学了工具tcpdump之后,里面会需要涉及到针对某个网卡抓包,因而会输入网卡名字,可是centOS7蛋疼的网卡默认命名实在是让人心碎,所以就想到了要修改网卡名字,步骤如下:(以下步骤涉及到我的错误 ...

  2. 控制台游戏引擎CGE——贪吃蛇

    今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...

  3. BZOJ2342 Manacher + set

    题一:别人介绍的一道题,题意是给出一个序列,我们要求出一段最常的连续子序列,满足:该子序列能够被平分为三段,第一段和第二段形成回文串,第二段和第三段形成回文串. 题二:BZOJ2342和这题非常的相似 ...

  4. LeetCode 1. Two Sum

    Problem: Given an array of integers, return indices of the two numbers such that they add up to a sp ...

  5. AJAX 同步异步笔记

    就在刚才,做一个很简单的Demo, 预览MP4视频文件 这就是一个video标签嘛,然后再动态的给src赋值嘛.这还不是so easy? 好,说做就做.先简单的测试一下.先给src赋值一下. 嗯,可以 ...

  6. iOS SQLite3的使用

    1.创建可修改的数据库文件 //应用包内的内容是不可写的,所以需要把应用包内的数据库拷贝一个副本到资源路径去 - (void)createEditableDatabase{ BOOL success; ...

  7. switch..case使用

    1.多个if...else连在一起使用的时候,可以转为使用更方便的switch结构.switch (XXX) { case "aaa": // ... break; case &q ...

  8. [ACM训练] 算法初级 之 基本算法 之 枚举(POJ 1753+2965)

    先列出题目: 1.POJ 1753 POJ 1753  Flip Game:http://poj.org/problem?id=1753 Sample Input bwwb bbwb bwwb bww ...

  9. 【尺取】POJ 3320

    POJ 3320 Jessica's Reading Problem 题意:一本书P页,第i页有ai知识点,问你至少从某一处开始连续要翻多少页才能复习完所有的知识点,不能跨页翻. 思路:<挑战程 ...

  10. SSH私钥取消密码(passphrase )

    1. 使用openssl命令去掉私钥的密码 openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new 2. 备份旧私钥 mv ~/.ssh/id_rsa ...