软键盘弹出顶起布局的小技巧

在安卓开发中我们会很频繁的和软键盘打交道,但是软键盘本来是不属于我们的布局的,它的出现会遮挡布局,比如,布局中有一个EditText是位于底部的,点击之后弹出软键盘,如果我们不做任何处理,那软键盘必然会将EditText遮挡,这是很糟糕的效果,该怎么避免呢?

首先我想到了Activity的windowSoftInputMode属性,这个属性能影响两件事情:
1、当有焦点产生时,软键盘是隐藏还是显示
2、是否改变活动主窗口大小以便腾出空间展示软键盘
它有以下值可以设置:
1、stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
2、stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
3、stateHidden:用户选择activity时,软键盘总是被隐藏
4、stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
5、stateVisible:软键盘通常是可见的
6、stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
7、adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
8、adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
9、adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖,并且用户总能看到输入内容的部分
可以设置一个或多个,多个之间用|分开。这些值中符合我们要求的是adjustResize和adjustPan。先看adjustPan,它会将当前获取了焦点的EditText之上的布局整体上移,以此来达到EditText不被软键盘覆盖的目的。但如果我只想让EditText和与EditText有关的一些控件上移,而它们之上的控件保持不变呢?OK,这时候我们就需要用到adjustResize,但是光用它还是不够的,还需要我们的布局配合。

我的需求如下:
1、布局的上半部分放一个视频播放器,可以实现简单的视频播放功能;
2、布局的下半部分有包括EditText在内的布局
3、点击EditText,要求包括EditText在内的布局均被软键盘顶起,而视频播放的布局不被挤压

实现效果如下
软键盘弹出顶起布局的小技巧_第1张图片

本人技术粗糙,布局写的不太好,但基本效果算是实现了(这里有用到点击EditText外部,隐藏键盘的小技巧,想要理解的请移步我的另一篇博客http://blog.csdn.net/k_bb_666/article/details/78805971),还有需要优化的地方,希望各位看官多提意见!直接上代码吧!
1、在清单文件中给相应的Activity设置windowSoftInputMode属性

		

2、布局文件


//最外层必须是RelativeLayout,才能保证布局被顶起

	//软键盘弹出时,这个布局不动,且视频播放正常,不被挤压变形
	//这层套FrameLayout是为了防止播放视频的布局被挤压
	
		//我在这里动态添加了播放器
        
        
    
	//以下是需要被软键盘顶起的布局
    

        

        

        

我们总结一下(敲黑板!划重点!)
1、最外层布局必须是相对布局RelativeLayout(保证只顶起部分布局,而不是将整个界面上移);
2、需要在承载视频播放器的布局外套一层FrameLayout(保证布局顶起时视频不被挤压);
3、将想要顶起的布局居于底部(保证此部分布局被全部顶起);

做到这三点就可以简单实现软键盘弹出,将布局顶起,且不挤压视频播放的效果了,本人文笔不好,且技术比较糙,希望写下的东西能帮助到大家!也希望大家多提意见!谢谢!

你可能感兴趣的:(android)