android软键盘显示和隐藏Word格式文档下载.docx

上传人:b****6 文档编号:19885816 上传时间:2023-01-11 格式:DOCX 页数:10 大小:135.17KB
下载 相关 举报
android软键盘显示和隐藏Word格式文档下载.docx_第1页
第1页 / 共10页
android软键盘显示和隐藏Word格式文档下载.docx_第2页
第2页 / 共10页
android软键盘显示和隐藏Word格式文档下载.docx_第3页
第3页 / 共10页
android软键盘显示和隐藏Word格式文档下载.docx_第4页
第4页 / 共10页
android软键盘显示和隐藏Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

android软键盘显示和隐藏Word格式文档下载.docx

《android软键盘显示和隐藏Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《android软键盘显示和隐藏Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

android软键盘显示和隐藏Word格式文档下载.docx

private 

static 

int 

count 

0;

3. 

4. 

public 

ResizeLayout(Context 

context, 

AttributeSet 

attrs) 

5. 

super(context, 

attrs);

6. 

7. 

8. 

@Override 

9. 

protected 

void 

onSizeChanged(int 

w, 

h, 

oldw, 

oldh) 

10. 

super.onSizeChanged(w, 

oldh);

11. 

12. 

Log.e("

onSizeChanged 

"

count++, 

=>

onResize 

called!

w="

+w 

h="

+h+"

oldw="

+oldw+"

oldh="

+oldh);

13. 

14. 

15. 

16. 

onLayout(boolean 

changed, 

l, 

t, 

r, 

b) 

17. 

super.onLayout(changed, 

b);

18. 

onLayout 

OnLayout 

l="

 

t="

r="

b="

+b);

19. 

20. 

21. 

22. 

onMeasure(int 

widthMeasureSpec, 

heightMeasureSpec) 

23. 

super.onMeasure(widthMeasureSpec, 

heightMeasureSpec);

24. 

25. 

onMeasure 

widthMeasureSpec="

widthMeasureSpec 

heightMeasureSpec="

26. 

我们的布局设置为:

1.<

com.winuxxan.inputMethodTest.ResizeLayout 

xmlns:

android="

id="

@+id/root_layout"

layout_width="

fill_parent"

layout_height="

orientation="

vertical"

>

<

EditText 

wrap_content"

/>

LinearLayout 

@+id/bottom_layout"

gravity="

bottom"

TextView 

text="

@string/hello"

background="

#77777777"

27. 

/LinearLayout>

28.<

/com.winuxxan.inputMethodTest.ResizeLayout>

AndroidManifest.xml的Activity设置属性:

windowSoftInputMode="

adjustResize"

运行程序,点击文本框,查看调试信息:

E/onMeasure6(7960):

=>

onMeasurecalled!

widthMeasureSpec=1073742144,heightMeasureSpec=1073742024

E/onMeasure7(7960):

widthMeasureSpec=1073742144,heightMeasureSpec=1073742025

E/onSizeChanged8(7960):

onSizeChangedcalled!

w=320,h=201,oldw=320,oldh=377

E/onLayout9(7960):

OnLayoutcalled!

l=0,t=0,r=320,b=201

从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。

实际上,当设置为adjustResize后,软键盘弹出时,要对主窗口布局重新进行measure和layout,而在layout时,发现窗口的大小发生的变化,因此调用了onSizeChanged。

从下图的运行结果我们也可以看出,原本在下方的TextView被顶到了输入法的上方。

模式二,平移模式

windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。

相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。

这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

上面的例子中,我们将AndroidManifest.xml的属性进行更改:

windowSoftInputMode="

adjustPan"

重新运行,并点击文本框,查看调试信息:

E/onMeasure6(8378):

widthMeasureSpec=1073742144,heightMeasureSpec=1073742200

E/onMeasure7(8378):

widthMeasureSpec=1073742144,heightMeasureSpec=1073742201

E/onLayout8(8378):

l=0,t=0,r=320,b=377

我们看到:

系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用,这说明输入法弹出前后并没有改变原有布局的大小。

从下图的运行结果我们可以看到,下方的TextView并没有被顶到输入法上方。

事实上,当输入框不会被遮挡时,该模式没有对布局进行调整,然而当输入框将要被遮挡时,窗口就会进行平移。

也就是说,该模式始终是保持输入框为可见。

如下图,整个窗口,包括标题栏均被上移,以保证文本框可见。

模式三自动模式

当属性windowSoftInputMode被设置为adjustUspecified时,它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。

系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。

如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。

这个是主窗口默认的行为设置。

也就是说,系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。

三、侦听软键盘的显示隐藏

有时候,借助系统本身的机制来实现主窗口的调整并非我们想要的结果,我们可能希望在软键盘显示隐藏的时候,手动的对布局进行修改,以便使软键盘弹出时更加美观。

这时就需要对软键盘的显示隐藏进行侦听。

直接对软键盘的显示隐藏侦听的方法本人没有找到,如果哪位找到的方法请务必告诉本人一声。

还有本方法针对压缩模式,平移模式不一定有效。

我们可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。

如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。

我们可以重写根布局,因为根布局的高度一般情况下是不发生变化的。

假设跟布局为线性布局,模式为压缩模式,我们写一个例子,当输入法弹出时隐藏某个view,输入法隐藏时显示某个view。

OnResizeListener 

mListener;

interface 

OnResize(int 

setOnResizeListener(OnResizeListener 

l) 

mListener 

l;

if 

(mListener 

!

null) 

mListener.OnResize(w, 

24.} 

在我们的Activity中,通过如下方法调用:

InputMethodTestActivity 

Activity 

final 

BIGGER 

1;

SMALLER 

2;

MSG_RESIZE 

HEIGHT_THREADHOLD 

30;

InputHandler 

Handler 

handleMessage(Message 

msg) 

switch 

(msg.what) 

case 

MSG_RESIZE:

(msg.arg1 

== 

BIGGER) 

findViewById(R.id.bottom_layout).setVisibility(View.VISIBLE);

else 

findViewById(R.id.bottom_layout).setVisibility(View.GONE);

break;

default:

super.handleMessage(msg);

28. 

mHandler 

new 

InputHandler();

29. 

30. 

/** 

Called 

when 

the 

activity 

is 

first 

created. 

*/ 

31. 

32. 

onCreate(Bundle 

savedInstanceState) 

33. 

super.onCreate(savedInstanceState);

34. 

setContentView(R.layout.main);

35. 

36. 

layout 

(ResizeLayout) 

findViewById(R.id.root_layout);

37. 

layout.setOnResizeListener(new 

ResizeLayout.OnResizeListener() 

38. 

39. 

40. 

change 

BIGGER;

41. 

(h 

42. 

SMALLER;

43. 

44. 

45. 

Message 

msg 

Message();

46. 

msg.what 

47. 

msg.arg1 

change;

48. 

mHandler.sendMessage(msg);

49. 

50. 

});

51. 

52.} 

这里特别需要注意的是,不能直接在OnResizeListener中对要改变的View进行更改,因为OnSizeChanged函数实际上是运行在View的layout方法中,如果直接在onSizeChange中改变view的显示属性,那么很可能需要重新调用layout方法才能显示正确。

然而我们的方法又是在layout中调用的,因此会出现错误。

因此我们在例子中采用了Handler的方法。

本文出自“winux”博客,谢绝转载!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1