Android 软键盘遮挡问题 windowSoftInputMode

原创 2015年11月19日 14:06:04


android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

关于软键盘遮挡住我们的EditView昨天碰到一个坑,在百度上搜了很多方法都没有办法解决。后来没有办法只能准备梯子。

关于遮挡问题有几个解决方法:

1,在你的activity中的oncreate中setContentView之前写上这个代码

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

或者在AndroidManifest.xml中找到相应的Activity设置

android:windowSoftInputMode="stateHidden|adjustResize"

一个是用代码设置,一个是用xml配置。

==========================================以下部分是在Google上搜到的 网址添加在最后面======================================

活动的主窗口如何与包含屏幕上的软键盘窗交互。这个属性的设置将会影响两件事情:

1>     软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。

2>     活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的

在xml中它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。各个值之间用|分开。

例如:android:windowSoftInputMode="stateVisible|adjustResize"

在这设置的值("stateUnspecified""adjustUnspecified"以外)将覆盖在主题中设置的值

"stateUnspecified" 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。

"stateUnchanged" 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

"stateHidden" 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity

"stateAlwaysHidden" 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

"stateVisible" 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)

"stateAlwaysVisible" 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity

"adjustUnspecified" 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些活动的主窗口如何与包含屏幕上的软键盘窗**互。这个属性的设置将会影响两件事情:

1>     软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。

2>     活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。


"adjustResize" Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。

"adjustPan" Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

bug
全屏状态下 adjustResize 不响应 只能用adjustpan,且webview 全屏状态下 adjustpan响应也不够好 有时无响应。

原文地址

==========================================以上部分是在Google上搜到的=====================================

关于这个bug我做一点补充:

在全屏状态是说的当我们在主题当中设置了

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

2那么adjustResize则无效。那么怎么解决这个问题类?

把android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

修改为

android:theme="@android:style/Theme.NoTitleBar"

。就可以了。不过状态栏就出来了。我后来也没有找到解决方法。如果有朋友解决了欢迎留言告知。(这个Theme.NoTitleBar.Fullscreen问题困扰了我几个小时,我在百度上完全搜不到关于这类的问题,在google一下子就搜到了。打了一个小广告。嘎嘎。)

继续软键盘的遮挡问题

2,在你的布局的最外层添加一层ScrollView,或者把你布局修改为ScrollView也行。但是这个如果ScrollView里面是LinearLayout则没有问题,如果是RelativeLayout那么问题就来了。

RelativeLayout里面的子控件无法使用android:layout_above=""属性一旦使用则不会显示。这样就会造成有些朋友的布局可能需要修改了。但是我们做接下来的步骤则可以完美的解决你的问题。这个问题你要作的是在你的RelativeLayout布局的上一层加一层LinearLayout。这样问题就解决了。哈哈。。。是不是很简单。

简单例子

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 注意这一层LinearLayout的子控件就只有一个 RelativeLayout-->
	<LinearLayout 
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:orientation="vertical">

	<!-- 注意这里的android:layout_height="768dp"我把这里设置死是为了全屏显示这个768dp要减去你手机或者pad的状态栏的高度。建议在代码中动态设置因为不同型号手机或者pad他的状态栏和高度都不同 -->
	    <RelativeLayout 
		    android:layout_width="match_parent"
		    android:layout_height="768dp"
		    android:id="@+id/register_main_lay"
		    android:background="#ffffffff">
		    <!-- 注意如果你的RelativeLayout的父控件没有LinearLayout的话android:layout_above="@+id/buttom_lay"是无效的,而且设置了这个属性的控件都不会显示出来 -->
		    <com.example.softwaretest.XViewPager 
		        android:id="@+id/viewpager"
		        android:layout_width="match_parent"
		        android:layout_height="match_parent"
		        android:background="#ffffffff"
		        android:layout_centerHorizontal="true"
		        android:layout_below="@+id/title_lay"
		        android:layout_above="@+id/buttom_lay">
		    </com.example.softwaretest.XViewPager>
		    <!-- title  -->
		    <LinearLayout 
		        android:id="@+id/title_lay"
		        android:layout_width="match_parent"
		        android:layout_height="wrap_content"
		        android:orientation="vertical"
		        android:background="#ff15B7F8"
		        >
		        <ImageView 
		            android:id="@+id/register_title_img"
		            android:layout_width="wrap_content"
		            android:layout_height="wrap_content"
		            android:layout_gravity="center_horizontal"
		            android:layout_marginTop="20dp"
		            android:src="@drawable/register_one"/>
		        <TextView 
		            android:id="@+id/register_title_txt"
		            android:layout_width="wrap_content"
		            android:layout_height="wrap_content"
		            android:text="asdf"
		            android:textColor="#ffffff"
		            android:textSize="18sp"
		            android:layout_gravity="center_horizontal"
		            android:layout_marginTop="10dp"
		            android:layout_marginBottom="20dp"/>
		    </LinearLayout>
		    
			<RelativeLayout 
			    android:id="@+id/buttom_lay"
			    android:layout_width="match_parent"
			    android:layout_height="wrap_content"
			    android:layout_marginBottom="40dp"
			    android:layout_alignParentBottom="true"
			    >
			    <TextView 
			        android:id="@+id/register_back"
			        android:layout_width="wrap_content"
			        android:layout_height="wrap_content"
			        android:text="shangyiye"
			        android:textColor="#67DFE8"
			        android:gravity="center"
			        android:textSize="24sp"
			        android:layout_alignParentLeft="true"
			        android:layout_marginLeft="40dp"
			        android:visibility="gone"/>
			    <TextView 
			        android:id="@+id/register_next"
			        android:layout_width="wrap_content"
			        android:layout_height="wrap_content"
			        android:text="next"
			        android:textSize="24sp"
			        android:gravity="center"
			        android:textColor="#67DFE8"
			        android:layout_alignParentRight="true"
			        android:layout_marginRight="40dp"/>
			    <TextView 
			        android:id="@+id/register_complete"
			        android:layout_width="wrap_content"
			        android:layout_height="wrap_content"
			        android:text="wanc "
			        android:textSize="24sp"
			        android:gravity="center"
			        android:textColor="#67DFE8"<a target=_blank href="http://blog.csdn.net/yigelangmandeshiren/article/details/24982609">在这里在分享一个其他的朋友写的</a>
			        android:layout_alignParentRight="true"
			        android:layout_marginRight="40dp"
			        android:visibility="gone"/>
			    
			</RelativeLayout>
		</RelativeLayout>
	    
	</LinearLayout>
	
</ScrollView>


另外在ScrollView中它的子控件android:layout_height="match_parent"属性也是不可以指定为match_parent的。如果你要全屏你只能写死xxxdp(768dp)还有一种方式就是在代码中动态的设置你的布局的高度。

在这里分享一个比较全的关于软键盘遮挡解决问题的地址

工作时间写的,擦。。。我怕不写就忘了。。。





版权声明:本文为博主原创文章,未经博主允许不得转载。

android:windowSoftInputMode属性详解

android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。 这个属性能影响两件事...

【Android开发经验】android:windowSoftInputMode属性详解

在前面的一篇文章中,简单的介绍了一下如何实现软键盘不自动弹出,使用的方法是设置android:windowSoftInputMode属性。那么,这个属性到底是干什么的,他有什么作用呢?今天这篇文章,就...

Activity下WindowSoftInputMode属性详解

最近在做一个银行的项目,所以需要自定义键盘,不再使用系统的键盘了,从中也遇到了很多问题,比如怎么控制系统键盘不弹出,然后怎么控制软键盘与当前Activity的交互,是时候了解下WindowSoftIn...
  • vv_bug
  • vv_bug
  • 2016年08月31日 22:46
  • 1713

android:windowSoftInputMode属性

有一段时间没有写博客了,主要是现在比较忙

android:windowSoftInputMode 无效的原因

android:windowSoftInpu

windowSoftInputMode属性设置值

(1)、AndroidManifest.xml文件中界面对应的里加入            android:windowSoftInputMode="adjustPan"   键盘就会覆盖屏幕  ...
  • yunnywu
  • yunnywu
  • 2012年08月30日 16:49
  • 12236

EditText android:windowSoftInputMode 属性之旅

当前Activity Edit获得焦点时,怎么设置不弹出键盘: android:windowSoftInputMode="stateHidden|adjustPan"在Mainifest中对应的Ac...

android activity的windowSoftInputMode属性

以上

不使用android:windowSoftInputMode属性,实现软键盘遮盖最下面布局的效果

废话不多说上图 这是页面,业务上希望当用户选择 预售价格(此时会弹出输入软键盘),键盘遮盖住“保存并下一步”按钮 如图: OK,就是这个效果,光标定位到当前的输入框。 现有问题...
  • Jack_l1
  • Jack_l1
  • 2013年10月11日 18:01
  • 8803

windowSoftInputMode折腾我一晚上

最近项目里有类似微信聊天界面需要我去写,要动态显示最新的数据,效果和微信基本一样。有个问题困扰我一晚上,每次进入Activity后,EditText自动获得焦点弹出软键盘,键盘遮挡listView,使...
  • jxy1197
  • jxy1197
  • 2013年01月31日 02:40
  • 12672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 软键盘遮挡问题 windowSoftInputMode
举报原因:
原因补充:

(最多只允许输入30个字)