如何将编辑框EditText置于系统软键盘之上及相关细节的实现

本文主要是介绍如何将编辑框EditText置于系统软键盘之上及相关细节的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请注明出处:http://blog.csdn.net/u010214991/article/details/48345437

最近在做类似于QQ空间和微信朋友圈的评论界面,顺便研究了下Android软键盘的一些使用方法,在网上收集了大量资料后自己进行了一些总结,并且通过亲测可用,希望能给广大读者带来用处。好了下面开始正题。



为了让大家更容易看懂,我贴出了一个小例子,在这个例子中有主要的活动界面MainActivity,有主要用于监听软键盘显示与隐藏的KeyboardListenRelativeLayout,在这里值得提出的是,由于软键盘并没有显示或隐藏的监听事件,因此我们只能通过判断当前布局的高度变化来进行软键盘的显示与隐藏(软键盘在弹出或收起时所在布局高度会改变)。而为了能够让整个界面能够自动调整高度,我们需要在配置的当前MainActivity中添加:android:windowSoftInputMode="adjustResize|stateHidden"。下面贴代码:




1.MainActivity.class

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.LinearLayout;public class MainActivity extends Activity implements OnClickListener {private Button button;private LinearLayout ll;InputMethodManager imm;private KeyboardListenRelativeLayout relativeLayout;private int oldHeight;private View view;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button1);ll = (LinearLayout) findViewById(R.id.line);relativeLayout = (KeyboardListenRelativeLayout) findViewById(R.id.mainlayout);view = findViewById(R.id.xian);imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);button.setOnClickListener(this);relativeLayout.setOnKeyboardStateChangedListener(new KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener() {@Overridepublic void onKeyboardStateChanged(int state) {// TODO Auto-generated method stubswitch (state) {case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE:ll.setVisibility(View.GONE);view.setVisibility(View.GONE);break;default:break;}}});}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubimm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);ll.requestFocus();ll.setVisibility(View.VISIBLE);view.setVisibility(View.VISIBLE);}@Overridepublic boolean onTouchEvent(MotionEvent event) {//该方法用于点击编辑框以外画面时隐藏软键盘,适用于简单的布局,复杂的可能无效// TODO Auto-generated method stubif (getCurrentFocus() != null&& getCurrentFocus().getWindowToken() != null) {imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);//隐藏软键盘}return super.onTouchEvent(event);}}





2.KeyboardListenRelativeLayout.class

import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;public class KeyboardListenRelativeLayout extends RelativeLayout {private static final String TAG = KeyboardListenRelativeLayout.class.getSimpleName();  public static final byte KEYBOARD_STATE_SHOW = -3;  public static final byte KEYBOARD_STATE_HIDE = -2;  public static final byte KEYBOARD_STATE_INIT = -1;  private boolean mHasInit = false;  private boolean mHasKeyboard = false;  private int mHeight;  private IOnKeyboardStateChangedListener onKeyboardStateChangedListener;  public KeyboardListenRelativeLayout(Context context) {  super(context);  }  public KeyboardListenRelativeLayout(Context context, AttributeSet attrs) {  super(context, attrs);  }  public KeyboardListenRelativeLayout(Context context, AttributeSet attrs, int defStyle) {  super(context, attrs, defStyle);  }  public void setOnKeyboardStateChangedListener(IOnKeyboardStateChangedListener onKeyboardStateChangedListener) {  this.onKeyboardStateChangedListener = onKeyboardStateChangedListener;  }  @Override  protected void onLayout(boolean changed, int l, int t, int r, int b) {  super.onLayout(changed, l, t, r, b);  if(!mHasInit) {  mHasInit = true;  mHeight = b;  if(onKeyboardStateChangedListener != null) {  onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_INIT);  }  } else {  mHeight = mHeight < b ? b : mHeight;  }  if(mHasInit && mHeight > b) {  mHasKeyboard = true;  if(onKeyboardStateChangedListener != null) {  onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_SHOW);  }  }  if(mHasInit && mHasKeyboard && mHeight == b) {  mHasKeyboard = false;  if(onKeyboardStateChangedListener != null) {  onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_HIDE);  }  }  }  public interface IOnKeyboardStateChangedListener {  public void onKeyboardStateChanged(int state);  }  
}




3.MainActivity的布局文件(activity_main.xml)

<com.example.test.KeyboardListenRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/mainlayout"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:layout_marginRight="101dp"android:layout_marginTop="75dp"android:text="发表" /><LinearLayout android:id="@+id/line"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_alignParentBottom="true"android:gravity="center_vertical"android:visibility="gone"><EditText android:id="@+id/edit"android:layout_width="wrap_content"android:layout_height="match_parent"android:hint="说点什么吧..."android:background="@null"android:layout_weight="10"/><Buttonandroid:layout_width="70dp"android:layout_height="42dp"android:background="#cfcad2"android:text="发送" /></LinearLayout><View android:id="@+id/xian"android:layout_width="match_parent"android:layout_height="0.8dp"android:layout_alignTop="@id/line"android:background="#cfcad2"android:visibility="gone"/>
</com.example.test.KeyboardListenRelativeLayout>



4.配置文件,其实就只是在当前活动中添加android:windowSoftInputMode="adjustResize|stateHidden"这句而已

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.test"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.test.MainActivity"android:windowSoftInputMode="adjustResize|stateHidden"android:screenOrientation="portrait"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>


最后附上演示例子供下载:

将编辑框EditText置于系统软键盘之上Demo


这篇关于如何将编辑框EditText置于系统软键盘之上及相关细节的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972395

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.