使用自定义布局,页面布局中包含ScrollVIew,在软键盘弹起后,布局的高度会发生改变,根据布局的高度来判断软键盘的状态。
转自:
http://www.eoeandroid.com/thread-157446-1-1.html
1. 新建一个布局类KeyboardLayout
/**
* @文件名: KeyboardLayout.java
* @包 com.nhii.widget
* @描述: TODO(用一句话描述该文件做什么)
* @作者:MaLijun
* @创建时间 2013-12-15 上午10:16:37
* @版本 V1.0
*/
package com.nhii.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.RelativeLayout;
public class KeyboardLayout extends RelativeLayout {
private static final String TAG = KeyboardLayout.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;
private boolean mHasKeybord;
private int mHeight;
private onKybdsChangeListener mListener;
public KeyboardLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public KeyboardLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public KeyboardLayout(Context context) {
super(context);
}
/** * set keyboard state listener */
public void setOnkbdStateListener(onKybdsChangeListener listener) {
mListener = listener;
}
@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 (mListener != null) {
mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT);
}
} else {
mHeight = mHeight < b ? b : mHeight;
}
if (mHasInit && mHeight > b) {
mHasKeybord = true;
if (mListener != null) {
mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW);
}
Log.w(TAG, "show keyboard.......");
}
if (mHasInit && mHasKeybord && mHeight == b) {
mHasKeybord = false;
if (mListener != null) {
mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE);
}
Log.w(TAG, "hide keyboard.......");
}
}
public interface onKybdsChangeListener {
public void onKeyBoardStateChange(int state);
}
}
2. activity中
package com.nhii.ui;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.Window;
import android.widget.Toast;
import com.nhii.R;
import com.nhii.widget.KeyboardLayout;
import com.nhii.widget.KeyboardLayout.onKybdsChangeListener;
import com.ta.annotation.TAInjectView;
public class TestPageActivity extends BaseActivity {
@TAInjectView(id = R.id.keyboardLayout1)
KeyboardLayout mainView;
@Override
protected void onPreOnCreate(Bundle savedInstanceState) {
super.onPreOnCreate(savedInstanceState);
// 取消标题
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 竖屏锁定
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@Override
protected void onAfterSetContentView() {
super.onAfterSetContentView();
mainView.setOnkbdStateListener(new onKybdsChangeListener() {
public void onKeyBoardStateChange(int state) {
switch (state) {
case KeyboardLayout.KEYBOARD_STATE_HIDE:
Toast.makeText(getApplicationContext(), "软键盘隐藏", Toast.LENGTH_SHORT).show();
break;
case KeyboardLayout.KEYBOARD_STATE_SHOW:
Toast.makeText(getApplicationContext(), "软键盘弹起", Toast.LENGTH_SHORT).show();
break;
}
}
});
}
}
3. xml页面
<com.nhii.widget.KeyboardLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboardLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/light_pink"
android:orientation="vertical" >
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:fillViewport="true" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/testone_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入..." />
</LinearLayout>
</ScrollView>
</com.nhii.widget.KeyboardLayout>
分享到:
相关推荐
在Android开发中,监听软键盘的弹出与隐藏是一个常见的需求,特别是在开发需要自适应界面布局的App时。Google并没有提供直接的API来监听软键盘的状态变化,因此开发者需要采用一些间接的方法。以下两种方法可以帮助...
"软键盘弹起隐藏的检测"是一个关键的技术点,尤其是在开发Android应用时,因为Android系统的键盘行为并不总是直观或一致的。下面将详细讨论这个主题,以及如何通过代码来检测软键盘的状态。 首先,软键盘的弹起和...
总的来说,监听Android软键盘的弹出与隐藏,以及获取软键盘高度,可以通过多种方式实现,开发者应根据具体需求选择合适的方法。同时,要注意兼容不同的`windowSoftInputMode`设置,以确保在各种情况下都能正确处理...
在Android开发中,软键盘的弹出与收起是一个常见的交互事件,对于界面布局和用户体验有着重要影响。本文将深入探讨如何在Android应用中监听软键盘的弹出与收起,以及实现这一功能的一些关键技术和策略。 首先,软...
下面将详细介绍如何在Android应用中监听软键盘的弹起与收起。 首先,我们需要理解Android布局高度的变化。当软键盘弹起时,屏幕可用的高度会减少,因为一部分空间被键盘占用;而当软键盘收起时,屏幕高度将恢复到...
在Android开发中,有时我们需要检测应用中的软键盘是否弹出,以便进行相应的界面调整或功能控制。例如,当用户打开虚拟键盘时,我们可能需要自动调整输入框的位置,或者在键盘隐藏时恢复原来的布局。标题“Android...
在Android开发中,软键盘的弹出与隐藏是一个常见的用户交互情景。由于软键盘占据了一部分屏幕空间,其弹出和隐藏会对界面布局产生影响。当软键盘弹出时,如果没有适当的监听机制,可能会导致用户界面上的内容被键盘...
在Activity的`onTouchEvent`方法中,如果检测到用户点击的不是EditText或其他需要输入的视图,就调用`InputMethodManager`关闭软键盘。 ```java @Override public boolean onTouchEvent(MotionEvent event) { if ...
在Android开发中,软键盘的弹出与收起是一个常见的需求,特别是在输入框交互和界面布局自适应时。本文将详细介绍三种实现软键盘监听的方法,帮助开发者选择最适合自己的方案。 一、方法一:使用InputMethodManager...
总之,“editview软键盘自动弹出和隐藏”涉及了Android中对软键盘显示与隐藏的控制,这对于创建用户友好的输入界面至关重要。通过理解和实践这些技巧,开发者能够更好地定制他们的应用交互,提高用户体验。
标题“安卓监听软键盘输入法的弹起隐藏”涉及到的关键技术点是Android系统的输入法管理以及如何在代码中监听这些变化。下面将详细介绍这个过程。 首先,理解Android输入法的工作原理。当用户在EditText控件上点击,...
通过监听`ViewTreeObserver.OnGlobalLayoutListener`,可以检测到视图树的全局布局变化,从而得知软键盘是否弹出。当键盘弹出时,可以手动调整底部视图的位置。 5. **使用第三方库**: 有一些开源库,如`android-...
此外,为了使自定义键盘与EditText交互更加顺畅,可能需要处理一些额外的细节,例如光标位置的控制、文本选择等。同时,还要考虑不同屏幕尺寸和方向的适配,以及如何优雅地处理输入法切换请求。 最后,如果应用需要...
在Android开发中,微信登录页面的设计考虑了用户体验的细节,其中软键盘弹出时登录按钮自动弹起这一功能,是通过特定的技术手段实现的。这一现象背后涉及到Android系统的视图布局管理、输入法服务(IME)以及...
监听Android软键盘弹出和收起事件(所有代码都是抽离自facebook/react-native源码中, 亲测有效, 放心食用)。回调事件方法参数包含键盘是否弹出(isShow)、键盘高度(keyboardHeight)、屏幕可用高度(screenHeight)、屏幕...
例如,监听键盘的弹出和隐藏事件,当键盘弹出时,将登录按钮的位置手动调整到屏幕可视区域。Android提供了`KeyboardUtil`等第三方库帮助检测软键盘的状态,但这种方法需要更精细的布局管理和事件处理。 在仿QQ登录...
从facebook React源码ReactRootView中抽离CustomGlobalLayoutListener,用于监听Android系统软键盘的弹出与关闭。 实现原理: 监听Android DecorView对应的GlobalLayout布局变化,从而判断是否弹出了软键盘。 其他...
前言:微信H5项目,ios端出现了软键盘输完隐藏后页面不会回弹,下方会有一大块留白 最近微信和ios都有版本升级,不知道是哪边升级造成的,但是经过测试,软键盘收起后,再滚动一下页面,下面的留白就会消失。所以...
总之,理解和掌握软键盘与UI布局的交互对于Android开发者来说非常重要,能够帮助我们创建更加用户友好的应用。通过监听布局变化和软键盘状态,我们可以灵活地调整界面,确保内容始终可见,提高用户体验。在实际项目...
在Android开发中,用户界面的交互体验至关重要,其中包括如何有效地管理软键盘的显示与隐藏。在某些场景下,我们希望用户在点击EditText之外的任何地方或者点击屏幕空白区域时,能够自动隐藏软键盘,以提供更流畅的...