关闭

Android 软键盘遮挡问题 windowSoftInputMode

标签: Android软键盘遮挡windowSoftInputModeTheme.NoTitleBar.FulScrollView
1025人阅读 评论(0) 收藏 举报
分类:


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)还有一种方式就是在代码中动态的设置你的布局的高度。

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

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





0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12876次
    • 积分:333
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:0篇
    • 译文:0篇
    • 评论:17条
    最新评论