Android UI开发中所遇到的各种坑

 更新时间:2018年12月24日 09:29:11   作者:pigdreams  
今天小编就为大家分享一篇关于Android UI开发中所遇到的各种坑,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

1.软键盘隐藏问题

  • 问题描述:Activity按下返回调用finish()方法后,界面已经销毁,但是软键盘依然还留在屏幕上,这让当前正在显示的Activity没有输入框的完全没法看,非常严重的视觉影响。
  • 尝试方案:寻找各种方法去隐藏软键盘,网上各种找。思路是在活动退出时,会调用onDestroy方法销毁界面,在这个方法里面想办法隐藏界面即可。找到下面这种方法,但还是不行。还尝试过用基类找到所有edittext然后让它们失去焦点,隐藏软键盘。
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
  • 解决方案:一开始在onDestroy()里调隐藏软键盘的思路就是错的,因为onDestroy()之前还有两个生命周期方法,像上述隐藏软键盘的方法有个getCurrentFocus(),在onDestroy()之前肯定得不到正确的获取当前焦点的那个控件了。所以在onPasue()方法里隐藏软键盘就有效,在onDestroy()方法里不管用任何方法都是无效的。
  • 注意点:用这个隐藏软键盘的方法,最好做为空判断,否则有可能会出现空指针的异常,如当前界面没有控件获取焦点时,则getCurrentFocus()这个方法得到的是一个null.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
if(getCurrentFocus!=null)
im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
  • 软键盘占用布局问题,软键盘有时会把一些控件覆盖掉,这时如何把整个界面向上顶起,让任何控件都不会被覆盖呢?有两步,第一在activity里设置一个属性,如下。第二步,布局里加一个scrollview将你要被顶起的视图放进这里,然后当软键盘显示的时候,就会在scrollview里滚动以获得空间进行显示软键盘。

<activity Android:windowSoftInputMode="adjustResize">

2.merge标签注意点

  • merge标签只有在根布局是FrameLayout时才有用,因为安卓所有界面的根布局都是FrameLayout,所以可以用merge标签进行融合。
  • merge标签使用后,布局里即使有EditText也无法自动获得焦点,只能手动设置焦点, 调用requestFocus()方法。或者是用requestFocus》在XML布局文件里。
  • 使用后要注意如果在根布局中,则不能用LayoutInflater来生成一个view,否则会报如下错误,由于我在listview的getview()里用了这个带有merge的布局,所以崩溃了。补充一点,inflater()方法里可以设置attach root为true则可以解析出来,不会出现崩溃。
 android.view.InflateException: Binary XML file line 
 #2: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
   Caused by: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true

3.LinearLayout注意点

  • 线性布局默认是水平的,要善用weight权重这个属性。
  • 非常重要的点,如果方向设为水平,则layout_gravity的top与bottom标签是没有效果的。如果方向设为垂直,则left与right是没有效果的,这时如果想放在靠右的地方,则可以使用space标签,将宽度设为0dp,将layoutweight设为1放在控件前边即可。

4. 布局选择

FrameLayout是最简单的一种布局,所有安卓界面的根布局都是FrameLayout,加载速度最快。

LinearLayou布局与RelativeLayout布局的加载速度需要进一步深入的研究才能得出具体结论。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • Android中系统默认输入法设置的方法(输入法的显示和隐藏)

    Android中系统默认输入法设置的方法(输入法的显示和隐藏)

    这篇文章主要介绍了Android中系统默认输入法设置的方法(输入法的显示和隐藏)的相关资料,需要的朋友可以参考下
    2016-01-01
  • Android倒计时控件 Splash界面5秒自动跳转

    Android倒计时控件 Splash界面5秒自动跳转

    这篇文章主要为大家详细介绍了Android倒计时控件,Splash界面5秒自动跳转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Android控件系列之TextView使用介绍

    Android控件系列之TextView使用介绍

    TextView类似一般UI中的Label,TextBlock等控件,只是为了单纯的显示一行或多行文本,本文介绍了Android中文本控件TextView的用法和常用属性的用法
    2012-11-11
  • Android开发服务Service全面讲解

    Android开发服务Service全面讲解

    Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也与活动Activity非常不同。通过使用服务我们可以实现一些后台操作,比如想从远程服务器加载一个网页等,下面来看看详细内容,需要的朋友可以参考下
    2023-02-02
  • Android中导航组件Navigation的实现原理

    Android中导航组件Navigation的实现原理

    大家好,本篇文章主要讲的是Android中导航组件Navigation的实现原理,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Android实现获取SERIAL信息的方法

    Android实现获取SERIAL信息的方法

    这篇文章主要介绍了Android实现获取SERIAL信息的方法,涉及Android操作SERIAL的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android编程中的消息机制实例详解

    Android编程中的消息机制实例详解

    这篇文章主要介绍了Android编程中的消息机制,结合实例形式较为详细的分析了Android中消息机制的原理,注意事项与相关使用技巧,需要的朋友可以参考下
    2016-01-01
  • Android:如何编写“万能”的Activity

    Android:如何编写“万能”的Activity

    本文主要介绍了编写“万能”的Activity的方法与步骤,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • kotlin项目加入Glide图片加载库并使用GlideApp的方法

    kotlin项目加入Glide图片加载库并使用GlideApp的方法

    这篇文章主要给大家介绍了关于kotlin项目加入Glide图片加载库并使用GlideApp的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2019-01-01
  • Android开发仿bilibili刷新按钮的实现代码

    Android开发仿bilibili刷新按钮的实现代码

    这篇文章主要介绍了Android 仿bilibili刷新按钮的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10

最新评论