作者丨devstrongzhao来源丨简书https://www.jianshu.com/p/5fd581329946现在,随着越来越多的Android的应用出现在Android Market上,如何能更加吸引用户成为摆在开发者面前的重要课题。作为Android应用,不仅要在内容上取胜,在比如界面等细节上也要很重视用户的使用体验,如果用户觉得操作困难和不符合操作习惯的话,就会认为应用不好用而不去下载或购买。在用户体验中,一些细节的问题更容易引起程序员的忽视。本文将介绍,在Android的界面设计中的各个控件的焦点顺序其中要注意的问题,这个很似简单的问题,值得开发者的重视。AD:Android设备有多种多样,操纵界面也有所不同,比如有触摸屏、轨迹球,传统的手机键盘等,因此开发者需要更好地了解,当用户在应用程序界面中的不同控件间移动时,各个控件的获得焦点和失去焦点的顺序,以及如何根据用户的操作习惯去自定义这些顺序。一般情况下,Android对于特定的布局界面,会自动得出一个合适的控件焦点顺序,很多情况下是足够用的了。但是在有的情况下是有例外的。控件的下一个焦点会到达哪一个控件,主要是判断当前控件在指定的方向布局上(up/down/left/right),哪一个是最领近的控件,其扫描顺序为从左到右,从上到下,就象平时阅读书籍一样。然而,这种顺序有时会带来一点小问题,比如当控件都布置在屏幕的上方时,如果用户再按“up”键,则不会有任何效果,同样,当控件都在屏幕下方、左边、右边时,此时再按如“down”、“Left”,“Right”键时都不会再获得控件的焦点。在本文的例子中,将讲解如何修改默认的控件焦点顺序,以定制特定的控件切换顺序,例子中,多个按钮以一个圆形进行了排列,例子可以在http://android-mt-tutorials.googlecode.com/svn/trunk/SimpleFocus中下载。步骤1定义界面布局我们先设计出界面的布局,代码如下,使用的是Relative相对布局:version="1.0"encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"android:layout_height="fill_parent">

style="@style/clockFaceNum"

android:text="12"android:id="@+id/button12"android:layout_alignParentTop="true"android:layout_centerHorizontal="true">

style="@style/clockFaceNum"

android:text="11"android:id="@+id/button11"android:layout_below="@+id/button12"android:layout_toLeftOf="@+id/button12">

style="@style/clockFaceNum"

android:text="1"android:id="@+id/button1"android:layout_below="@+id/button12"android:layout_toRightOf="@+id/button12">

style="@style/clockFaceNum"

android:text="10"android:id="@+id/button10"android:layout_below="@+id/button11"android:layout_toLeftOf="@+id/button11">

style="@style/clockFaceNum"

android:text="2"android:id="@+id/button2"android:layout_below="@+id/button1"android:layout_toRightOf="@+id/button1">

style="@style/clockFaceNum"

android:text="9"android:id="@+id/button9"android:layout_below="@+id/button10"android:layout_toLeftOf="@+id/button10">

style="@style/clockFaceNum"

android:text="3"android:id="@+id/button3"android:layout_below="@+id/button2"android:layout_toRightOf="@+id/button2">

style="@style/clockFaceNum"

android:text="8"android:id="@+id/button8"android:layout_below="@+id/button9"android:layout_toRightOf="@+id/button9">

style="@style/clockFaceNum"

android:text="4"android:id="@+id/button4"android:layout_below="@+id/button3"android:layout_toLeftOf="@+id/button3">

style="@style/clockFaceNum"

android:text="7"android:id="@+id/button7"android:layout_below="@+id/button8"android:layout_toRightOf="@+id/button8">

style="@style/clockFaceNum"

android:text="5"android:id="@+id/button5"android:layout_below="@+id/button4"android:layout_toLeftOf="@+id/button4">

style="@style/clockFaceNum"

android:text="6"android:id="@+id/button6"android:layout_below="@+id/button5"android:layout_centerHorizontal="true">

上面定义的style文件如下:

1.version="1.0"encoding="utf-8"?>2.3.4.name="clockFaceNum">5.6.name="android:layout_width">38dp7.8.name="android:layout_height">38dp9.10.name="android:onClick">numClicked11.12.name="android:textSize">9sp13.14.运行后,效果如下图:步骤2默认的控件焦点切换顺序比如当用户将控件焦点点在12号按钮时,点往下的“down”按钮,默认的控件焦点切换顺序如下图:也就是说,当在按钮12上往下按的时候,控件的焦点会切换到11,接着就是键10,如此类推。步骤3创建自定义的控件焦点顺序下面,我们尝试创建自定义的控件焦点顺序,即同时允许在上面的界面中,当用户按键时,以顺时针或逆时针进行控件切换,如下图:也就是说,允许用户当按“Down”或“Right”键时,切换顺序是顺时针方向,比如假设当前在键12上,按“Down”或“Right”键时,会切换到键1,而按“Up”或”Left”时,会切换到键11,如此类推。要实现这点,可以在每个按钮中进行设置如下四个属性:android:nextFocusUp-定义当点up键时,哪个控件将获得焦点android:nextFocusDown-定义当点down键时,哪个控件将获得焦点android:nextFocusLeft-定义当点left键时,哪个控件将获得焦点android:nextFocusRight--定义当点right键时,哪个控件将获得焦点下面是其代码:1.version="1.0"encoding="utf-8"?>2.3.xmlns:android="http://schemas.android.com/apk/res/android"4.android:layout_width="fill_parent"5.android:layout_height="fill_parent">6.7.style="@style/clockFaceNum"8.android:text="12"9.android:id="@+id/button12"10.android:layout_alignParentTop="true"11.android:layout_centerHorizontal="true"12.android:nextFocusUp="@+id/button11"13.android:nextFocusLeft="@+id/button11"14.android:nextFocusRight="@+id/button1"15.android:nextFocusDown="@+id/button1">16.17.18.style="@style/clockFaceNum"19.android:text="11"20.android:id="@+id/button11"21.android:layout_below="@+id/button12"22.android:layout_toLeftOf="@+id/button12"23.android:nextFocusUp="@+id/button10"24.android:nextFocusLeft="@+id/button10"25.android:nextFocusRight="@+id/button12"26.android:nextFocusDown="@+id/button12">27.28.29.style="@style/clockFaceNum"30.android:text="1"31.android:id="@+id/button1"32.android:layout_below="@+id/button12"33.android:layout_toRightOf="@+id/button12"34.android:nextFocusUp="@+id/button12"35.android:nextFocusLeft="@+id/button12"36.android:nextFocusRight="@+id/button2"37.android:nextFocusDown="@+id/button2">38.39.40.style="@style/clockFaceNum"41.android:text="10"42.android:id="@+id/button10"43.android:layout_below="@+id/button11"44.android:layout_toLeftOf="@+id/button11"45.android:nextFocusUp="@+id/button9"46.android:nextFocusLeft="@+id/button9"47.android:nextFocusRight="@+id/button11"48.android:nextFocusDown="@+id/button11">49.50.51.style="@style/clockFaceNum"52.android:text="2"53.android:id="@+id/button2"54.android:layout_below="@+id/button1"55.android:layout_toRightOf="@+id/button1"56.android:nextFocusUp="@+id/button1"57.android:nextFocusLeft="@+id/button1"58.android:nextFocusRight="@+id/button3"59.android:nextFocusDown="@+id/button3">60.61.62.style="@style/clockFaceNum"63.android:text="9"64.android:id="@+id/button9"65.android:layout_below="@+id/button10"66.android:layout_toLeftOf="@+id/button10"67.android:nextFocusUp="@+id/button8"68.android:nextFocusLeft="@+id/button8"69.android:nextFocusRight="@+id/button10"70.android:nextFocusDown="@+id/button10">71.72.73.74.style="@style/clockFaceNum"75.android:text="3"76.android:id="@+id/button3"77.android:layout_below="@+id/button2"78.android:layout_toRightOf="@+id/button2"79.android:nextFocusUp="@+id/button2"80.android:nextFocusLeft="@+id/button2"81.android:nextFocusRight="@+id/button4"82.android:nextFocusDown="@+id/button4">83.84.85.style="@style/clockFaceNum"86.android:text="8"87.android:id="@+id/button8"88.android:layout_below="@+id/button9"89.android:layout_toRightOf="@+id/button9"90.android:nextFocusUp="@+id/button7"91.android:nextFocusLeft="@+id/button7"92.android:nextFocusRight="@+id/button9"93.android:nextFocusDown="@+id/button9">94.95.96.style="@style/clockFaceNum"97.android:text="4"98.android:id="@+id/button4"99.android:layout_below="@+id/button3"100.android:layout_toLeftOf="@+id/button3"101.android:nextFocusUp="@+id/button3"102.android:nextFocusLeft="@+id/button3"103.android:nextFocusRight="@+id/button5"104.android:nextFocusDown="@+id/button5">105.106.107.style="@style/clockFaceNum"108.android:text="7"109.android:id="@+id/button7"110.android:layout_below="@+id/button8"111.android:layout_toRightOf="@+id/button8"112.android:nextFocusUp="@+id/button6"113.android:nextFocusLeft="@+id/button6"114.android:nextFocusRight="@+id/button8"115.android:nextFocusDown="@+id/button8">116.117.118.style="@style/clockFaceNum"119.android:text="5"120.android:id="@+id/button5"121.android:layout_below="@+id/button4"122.android:layout_toLeftOf="@+id/button4"123.android:nextFocusUp="@+id/button4"124.android:nextFocusLeft="@+id/button4"125.android:nextFocusRight="@+id/button6"126.android:nextFocusDown="@+id/button6">127.128.129.style="@style/clockFaceNum"130.android:text="6"131.android:id="@+id/button6"132.android:layout_below="@+id/button5"133.android:layout_centerHorizontal="true"134.android:nextFocusUp="@+id/button5"135.android:nextFocusLeft="@+id/button5"136.android:nextFocusRight="@+id/button7"137.android:nextFocusDown="@+id/button7">138.139.下图中是假定在键12开始按down键时的焦点切换顺序:步骤4设置界面的初始控件焦点在每个页面加载时,可以设置界面中初始的控件焦点,以方便用户的定位操作,只需要在控件中加入即可。比如:1.2.style="@style/clockFaceNum"3.android:text="12"4.android:id="@+id/button12"5.android:layout_alignParentTop="true"6.android:layout_centerHorizontal="true"7.android:nextFocusUp="@+id/button11"8.android:nextFocusLeft="@+id/button11"9.android:nextFocusRight="@+id/button1"10.android:nextFocusDown="@+id/button1">11./>12.小结作为开发者,一定要记住由于Android设备的多样性,用户如何在界面上方便地进行输入或在不同的控件中来回切换是十分重要的,本文简单介绍了用户如何自定义控件的焦点切换顺序,这对于用户界面的体验是很有好处的。

android 默认焦点设置_Android界面设计基础:控件焦点4个步骤相关推荐

  1. android 固定底部 布局_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  2. android listview添加数据_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  3. android组建之间通信_Android各组件/控件间通信利器之EventBus

    实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变.举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每 ...

  4. android 取消控件焦点,C# 给一个控件去掉焦点

    给一个控件去掉焦点(如选中控件按钮button时,按钮出现方框显示): 例如给form这个窗体中的button按钮去焦点 1.首先在form这个窗体中拖一个label按钮,去文字,设置背景为透明: 2 ...

  5. Android如何设置按钮图片(控件图片)大小自适应

    Android如何设置按钮图片(控件图片)大小自适应 在你的button中放入图片:drawble属性,你可以选择它的位置上下左右, 如何让图片自适应? 把图片放入res-drawable-mipma ...

  6. Android TV Demo 工程,其中包含 TV 常用的自定义控件,飞框效果实现,外边框效果实现,UI 控件焦点自动处理,使 TV 开发更简单,更高效。

    TVLibraryDemo 项目地址:zhangtiansheng/TVLibraryDemo  简介:Android TV Demo 工程,其中包含 TV 常用的自定义控件,飞框效果实现,外边框效果 ...

  7. 2021-03-15 设置默认为日期与时间datepick控件显示方式

    设置默认为日期与时间datepick控件显示方式 this.dtpStart.CustomFormat = "yyyy-MM-dd HH:mm:ss"; this.dtpStart ...

  8. qt 设置焦点 跳到下个控件_【Qt】Qt之Tab键切换焦点顺序【转】

    简介 Qt的窗口部件按用户的习惯来处理键盘焦点.也就是说,其出发点是用户的焦点能定向到任何一个窗口,或者窗口中任何一个部件. 焦点获取方式比较多,例如:鼠标点击.Tab键切换.快捷键.鼠标滚轮等. 习 ...

  9. Android基础学习(二)—— 常用控件

    TextView 显示文本内容 Button 按钮 EditText 输入框 ImageView 显示图片 ProgressBar 进度条 ToolBar 自定义标题栏 AlertDialog 对话框 ...

最新文章

  1. 北大研究人员这次发现了AI「躺平」原因,都是数据集的错!
  2. 使用批处理实现mysql数据库备份与上传
  3. 19课 Vue第二节
  4. bzoj5368 [Pkusc2018]真实排名
  5. mysql 忘记root密码的解决
  6. CString类的用法总结
  7. 改善医疗营运效率 哈佛医学中心与 AWS 共同合作
  8. display:inline-block的深入理解 转
  9. BZOJ 2818 Gcd
  10. 网易如何做新闻推荐:深度学习排序系统及模型
  11. 作为一个程序员,数学对你到底有多重要
  12. 字节跳动李航博士入选2019 ACL Fellow,成为第五位入选华人学者
  13. 关于作虚拟软盘启动(转)
  14. 论文笔记(十八):Object Detection and Spatial Location Method for ... Based on 3D Virtual Geographical Scen
  15. ubuntu14.10搭建dhcp服务器
  16. 掷骰子python代码_Python之使用Pygal模拟掷骰子
  17. Java基础-构造函数
  18. IPv6改造的重要性
  19. # 个人日记-电影《关于我妈的一切》观后感-20210922
  20. PL SQL中如何去掉字符串中重复的字符

热门文章

  1. MySQL懒查询_mysql 联查的基本命令
  2. P2617 Dynamic Rankings
  3. java邮件设置成可修改_Java实现发送邮件(可配置)忘记密码,发送邮件
  4. oracle 循环select查询的结构集,执行insert到指定表保存
  5. html两个select怎么放在一行,HTML`select`和`input`在一行中
  6. java 内存泄露 书籍_[Java教程]一次艰难的内存泄露排查,BeanUtils 的锅
  7. linux java heap space_Linux tomcat9 java.lang.OutOfMemoryError: Java heap space 解决方法
  8. GuaiGuai ---- 1
  9. IPLATUI----Grid校验
  10. 动力环境监控系统论文_浅析建设智能化动力环境监控系统维护水平论文