如何将编辑框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实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点