在做登录和注册页面的时候,经常会遇到诸如软键盘挡住输入框的情况,android为此提供了一系列的的配置参数供选择,你可以在androidmanufist.xml的对应Activity的windowSoftInputMode属性中选择如下4者之一进行配置(紫色字):
<activity android:name=".LoginAc"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
四个参数意思如下:
SOFT_INPUT_ADJUST_NOTHING: 不调整(输入法完全直接覆盖住,未开放此参数)
SOFT_INPUT_ADJUST_PAN: 把整个Layout顶上去露出获得焦点的EditText,不压缩多余空间,见图1
SOFT_INPUT_ADJUST_RESIZE: 整个Layout重新编排,重新分配多余空间,见图2
SOFT_INPUT_ADJUST_UNSPECIFIED: 系统自己根据内容自行选择上两种方式的一种执行(默认配置)
这里的多余空间指的是控件们通过weight分配机制得到的额外空间。
图1
图2
图3
代码实现方式为:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
但是,这样的配置方法一般都很难完全满足需要,有得应用会做得比较好,让顶上去的Layout能够通过scrollbar滚动。这种解决方法网上有各种介绍,本人也是第一时间从网上找解决方法参考,但最终发现都并未把原理说清,而且大多数有错误,或者有多余配置,于是,我从android系统中源码中找参考案例,在Email应用中,找到了我想要的。效果如图4,5。
图4
图5
其对应的Activity是AccountSetupBasics.java,对应的xml文件为account_setup_basics.xml。
来学习下它的xml写法:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:scrollbarStyle="outsideInset" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/instructions"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:textSize="20sp"
android:text="@string/accounts_welcome"
android:textColor="?android:attr/textColorPrimary" />
<View
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<EditText
android:id="@+id/account_email"
android:hint="@string/account_setup_basics_email_hint"
android:inputType="textEmailAddress"
android:imeOptions="actionNext"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
<EditText
android:id="@+id/account_password"
android:hint="@string/account_setup_basics_password_hint"
android:inputType="textPassword"
android:imeOptions="actionDone"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:nextFocusDown="@+id/next" />
<CheckBox
android:id="@+id/account_default"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/account_setup_basics_default_label"
android:visibility="gone" />
<View
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="54dip"
android:background="@android:drawable/bottom_bar" >
<Button
android:id="@+id/manual_setup"
android:text="@string/account_setup_basics_manual_setup_action"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:minWidth="@dimen/button_minWidth"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<Button
android:id="@+id/next"
android:text="@string/next_action"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:minWidth="@dimen/button_minWidth"
android:drawableRight="@drawable/button_indicator_next"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
</RelativeLayout>
</LinearLayout>
</ScrollView>
1 它完全把ScrollView作为了一个根Layout,而不是网上好多文章写的在一个Linearlayout里面嵌入一个ScrollView(貌似这种是行不通的)。
然后把我们原来的根Layout搬入ScrollView(ScrollView只能有一个子控件),我查了下androidmanifist.xml和代码,未做任何以上2种方法的配置。
2 它定义了2个0dip的View帮助分配空间(设置其weight吃掉剩余空间,保证输入框处于界面中心位置),可以猜测出这里系统调用的是SOFT_INPUT_ADJUST_RESIZE参数,当所有有实际内容的控件空间总和超出特定范围时,ScrollView开始发挥作用。
如此,完美的解决我们遇到的问题。
另外,网上有人说想用SOFT_INPUT_ADJUST_RESIZE ,但又不希望背景图片被压缩,只要按如上方法把Linearlayout的背景图片设置好即可。
分享到:
相关推荐
当软键盘弹出时,由于屏幕可用空间减少,根布局的高度会相应减小;而当软键盘收起时,根布局的高度则会恢复。可以通过重写onGlobalLayout()方法并使用ViewTreeObserver来监听布局的变化: ```java rootView....
在默认情况下,Android布局是静态的,当软键盘弹出时,布局不会自动调整。要改变这一行为,我们通常会采用以下几种方法: 1. **调整Activity的WindowSoftInputMode**: 在AndroidManifest.xml中,找到对应的...
综上所述,实现禁止软键盘弹出并使用自定义键盘的功能,涉及到了Android布局设计、事件监听、DialogFragment的使用以及输入管理等多个方面。通过合理的设计和编程,我们可以提供更符合应用场景的用户体验。在keydemo...
Android系统在软键盘弹出或隐藏时会触发Activity的布局过程,我们可以通过监听这个过程来判断软键盘的状态。描述中提到的方法是通过重写`onLayout`方法来实现这一功能。 `onLayout`方法是View类的一个回调方法,它...
本文将详细讲解如何在Qt交叉编译后,针对aarch64-linux-gnu架构的Zynq板调用软键盘,并解决软键盘背景全黑的问题。 首先,我们需要理解Qt的交叉编译过程。交叉编译是将程序在一种平台上编译,然后在另一种不同的...
本示例"软键盘弹出时动态改变UI布局学习Demo"着重讲解如何处理这一常见问题,以提供良好的用户体验。 首先,我们需要理解Android中的布局管理。在默认情况下,当软键盘弹出时,Android会调整Activity的布局以适应...
监听Android软键盘弹出和收起事件(所有代码都是抽离自facebook/react-native源码中, 亲测有效, 放心食用)。回调事件方法参数包含键盘是否弹出(isShow)、键盘高度(keyboardHeight)、屏幕可用高度(screenHeight)、屏幕...
if (heightDiff > dpToPx(context, 200)) { // 如果高度差超过200dp,假设软键盘弹出 // 软键盘弹出的处理逻辑 } else { // 软键盘隐藏的处理逻辑 } } }); // dp转px的辅助方法 public static float dpToPx...
5. 文件名称列表:“点击文本框弹出软键盘”可能是项目的主要文件,这可能包含VB或C#代码文件、资源文件(如软键盘的图像或图标)、以及项目配置文件。这些文件共同构成了实现这个功能的完整工程。 总的来说,通过...
当软键盘弹出时,屏幕的可使用高度会减少,因此可以通过比较不同时间点的布局高度来判断软键盘是否弹出。然而,这种方法的缺点是它可能导致界面压缩,而不是控件平移,这可能不符合某些开发者的设计需求。如果需要在...
"无软键盘弹出的EditText"是一个常见需求,主要是为了优化用户体验或者满足特殊设计要求。本篇文章将详细探讨如何实现这一功能。 首先,我们需要了解EditText的基本特性。EditText是Android系统提供的一种文本输入...
本文将详细介绍如何解决这一问题,实现软键盘弹出时页面整体上移,以及点击空白区域收起软键盘的效果,并且将11位手机号格式化为xxx xxxx xxxx的显示形式。 首先,要让页面整体上移,我们需要在`AndroidManifest....
然而,当软键盘弹出时,布局不会自动适应键盘的高度,因此可能导致下方元素被遮挡。 解决软键盘遮挡登录按钮的方法主要有以下几种: 1. 使用`android:windowSoftInputMode="adjustResize"`: 在AndroidManifest....
还可以创建一个BroadcastReceiver来监听系统的输入设备状态变化,当键盘弹出或收起时,系统会发送相应的广播。不过,这种方法需要声明权限,并且在Android 8.0及以上版本可能会失效。 ```java public class ...
在描述中提到的“QlineEdit弹出的部分”,指的是在用户点击QLineEdit时,弹出数字软键盘。这通常通过自定义事件处理或插件实现。开发者可以监听QLineEdit的焦点变化事件,当获得焦点时显示软键盘,失去焦点时隐藏。 ...
在AndroidManifest.xml中,针对登录Activity的标签添加这一属性,可以让Activity在软键盘弹出时调整其大小,使得底部的按钮始终可见。但需要注意,这种模式可能导致输入框失去焦点,用户无法直接在键盘上输入,所以...
在Android开发中,微信登录页面的设计考虑了用户体验的细节,其中软键盘弹出时登录按钮自动弹起这一功能,是通过特定的技术手段实现的。这一现象背后涉及到Android系统的视图布局管理、输入法服务(IME)以及...
Android 软键盘调整界面问题解决方案 Android 软键盘的问题是 Android 开发中常见的问题之一。...通过了解软键盘的状态和调整方法,可以更好地解决软键盘相关问题,提高 Android 应用程序的用户体验。
首先,我们需要理解Android布局在软键盘弹出时的行为。默认情况下,Android会将整个布局向上移动以适应软键盘的显示,但这可能导致输入框仍然被键盘遮挡。为了解决这个问题,我们可以使用以下几种方法: 1. **调整...
这种技术通常用于移动设备,因为在触摸屏设备上,弹出的系统键盘可能会遮挡页面内容。 实现JS软键盘的关键点包括: 1. **界面设计**:使用HTML和CSS构建键盘布局,包括各种按键、回车键、删除键等,并设置合适的...