Android界面设计基础:控件焦点4个步骤

Android设备有多种多样,操纵界面也有所不同,比如有触摸屏、轨迹球,传统的手机键盘等,因此开发者需要更好地了解,当用户在应用程序界面中的不同控件间移动时,各个控件的获得焦点和失去焦点的顺序,以及如何根据用户的操作习惯去自定义这些顺序。

成都创新互联公司专注于周口网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供周口营销型网站建设,周口网站制作、周口网页设计、周口网站官网定制、小程序定制开发服务,打造周口网络公司原创品牌,更为您提供周口网站排名全网营销落地服务。

一般情况下,Android对于特定的布局界面,会自动得出一个合适的控件焦点顺序,很多情况下是足够用的了。但是在有的情况下是有例外的。控件的下一个焦点会到达哪一个控件,主要是判断当前控件在指定的方向布局上(up/down/left/right),哪一个是最领近的控件,其扫描顺序为从左到右,从上到下,就象平时阅读书籍一样。

然而,这种顺序有时会带来一点小问题,比如当控件都布置在屏幕的上方时,如果用户再按“up”键,则不会有任何效果,同样,当控件都在屏幕下方、左边、右边时,此时再按如“down”、“Left”,“Right”键时都不会再获得控件的焦点。

在本文的例子中,将讲解如何修改默认的控件焦点顺序,以定制特定的控件切换顺序,例子中,多个按钮以一个圆形进行了排列,例子可以在

http://android-mt-tutorials.googlecode.com/svn/trunk/SimpleFocus中下载。

步骤1 定义界面布局

我们先设计出界面的布局,代码如下,使用的是Relative相对布局:

 
 
 
  1.  
  2.     xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent"> 
  5.     
  6.         style="@style/clockFaceNum" 
  7.         android:text="12" 
  8.         android:id="@+id/button12" 
  9.         android:layout_alignParentTop="true" 
  10.         android:layout_centerHorizontal="true"> 
  11.      
  12.     
  13.         style="@style/clockFaceNum" 
  14.         android:text="11" 
  15.         android:id="@+id/button11" 
  16.         android:layout_below="@+id/button12" 
  17.         android:layout_toLeftOf="@+id/button12"> 
  18.      
  19.     
  20.         style="@style/clockFaceNum" 
  21.         android:text="1" 
  22.         android:id="@+id/button1" 
  23.         android:layout_below="@+id/button12" 
  24.         android:layout_toRightOf="@+id/button12"> 
  25.      
  26.     
  27.         style="@style/clockFaceNum" 
  28.         android:text="10" 
  29.         android:id="@+id/button10" 
  30.         android:layout_below="@+id/button11" 
  31.         android:layout_toLeftOf="@+id/button11"> 
  32.      
  33.     
  34.         style="@style/clockFaceNum" 
  35.         android:text="2" 
  36.         android:id="@+id/button2" 
  37.         android:layout_below="@+id/button1" 
  38.         android:layout_toRightOf="@+id/button1"> 
  39.      
  40.     
  41.         style="@style/clockFaceNum" 
  42.         android:text="9" 
  43.         android:id="@+id/button9" 
  44.         android:layout_below="@+id/button10" 
  45.         android:layout_toLeftOf="@+id/button10"> 
  46.      
  47.  
  48.     
  49.         style="@style/clockFaceNum" 
  50.         android:text="3" 
  51.         android:id="@+id/button3" 
  52.         android:layout_below="@+id/button2" 
  53.         android:layout_toRightOf="@+id/button2"> 
  54.      
  55.     
  56.         style="@style/clockFaceNum" 
  57.         android:text="8" 
  58.         android:id="@+id/button8" 
  59.         android:layout_below="@+id/button9" 
  60.         android:layout_toRightOf="@+id/button9"> 
  61.      
  62.     
  63.         style="@style/clockFaceNum" 
  64.         android:text="4" 
  65.         android:id="@+id/button4" 
  66.         android:layout_below="@+id/button3" 
  67.         android:layout_toLeftOf="@+id/button3"> 
  68.      
  69.     
  70.         style="@style/clockFaceNum" 
  71.         android:text="7" 
  72.         android:id="@+id/button7" 
  73.         android:layout_below="@+id/button8" 
  74.         android:layout_toRightOf="@+id/button8"> 
  75.      
  76.     
  77.         style="@style/clockFaceNum" 
  78.         android:text="5" 
  79.         android:id="@+id/button5" 
  80.         android:layout_below="@+id/button4" 
  81.         android:layout_toLeftOf="@+id/button4"> 
  82.      
  83.     
  84.         style="@style/clockFaceNum" 
  85.         android:text="6" 
  86.         android:id="@+id/button6" 
  87.         android:layout_below="@+id/button5" 
  88.         android:layout_centerHorizontal="true"> 
  89.      
  90.  
  91.   

 上面定义的style文件如下:

 
 
 
  1.  
  2.  
  3.     
  4.         name="clockFaceNum"> 
  5.         
  6.             name="android:layout_width">38dp 
  7.         
  8.             name="android:layout_height">38dp 
  9.         
  10.             name="android:onClick">numClicked 
  11.         
  12.             name="android:textSize">9sp 
  13.      
  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.  
  2.     xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent"> 
  5.     
  6.         style="@style/clockFaceNum" 
  7.         android:text="12" 
  8.         android:id="@+id/button12" 
  9.         android:layout_alignParentTop="true" 
  10.         android:layout_centerHorizontal="true" 
  11.         android:nextFocusUp="@+id/button11" 
  12.         android:nextFocusLeft="@+id/button11" 
  13.         android:nextFocusRight="@+id/button1" 
  14.         android:nextFocusDown="@+id/button1"> 
  15.      
  16.     
  17.         style="@style/clockFaceNum" 
  18.         android:text="11" 
  19.         android:id="@+id/button11" 
  20.         android:layout_below="@+id/button12" 
  21.         android:layout_toLeftOf="@+id/button12" 
  22.         android:nextFocusUp="@+id/button10" 
  23.         android:nextFocusLeft="@+id/button10" 
  24.         android:nextFocusRight="@+id/button12" 
  25.         android:nextFocusDown="@+id/button12"> 
  26.      
  27.     
  28.         style="@style/clockFaceNum" 
  29.         android:text="1" 
  30.         android:id="@+id/button1" 
  31.         android:layout_below="@+id/button12" 
  32.         android:layout_toRightOf="@+id/button12" 
  33.         android:nextFocusUp="@+id/button12" 
  34.         android:nextFocusLeft="@+id/button12" 
  35.         android:nextFocusRight="@+id/button2" 
  36.         android:nextFocusDown="@+id/button2"> 
  37.      
  38.     
  39.         style="@style/clockFaceNum" 
  40.         android:text="10" 
  41.         android:id="@+id/button10" 
  42.         android:layout_below="@+id/button11" 
  43.         android:layout_toLeftOf="@+id/button11" 
  44.         android:nextFocusUp="@+id/button9" 
  45.         android:nextFocusLeft="@+id/button9" 
  46.         android:nextFocusRight="@+id/button11" 
  47.         android:nextFocusDown="@+id/button11"> 
  48.      
  49.     
  50.         style="@style/clockFaceNum" 
  51.         android:text="2" 
  52.         android:id="@+id/button2" 
  53.         android:layout_below="@+id/button1" 
  54.         android:layout_toRightOf="@+id/button1" 
  55.         android:nextFocusUp="@+id/button1" 
  56.         android:nextFocusLeft="@+id/button1" 
  57.         android:nextFocusRight="@+id/button3" 
  58.         android:nextFocusDown="@+id/button3"> 
  59.      
  60.     
  61.         style="@style/clockFaceNum" 
  62.         android:text="9" 
  63.         android:id="@+id/button9" 
  64.         android:layout_below="@+id/button10" 
  65.         android:layout_toLeftOf="@+id/button10" 
  66.         android:nextFocusUp="@+id/button8" 
  67.         android:nextFocusLeft="@+id/button8" 
  68.         android:nextFocusRight="@+id/button10" 
  69.         android:nextFocusDown="@+id/button10"> 
  70.      
  71.  
  72.     
  73.         style="@style/clockFaceNum" 
  74.         android:text="3" 
  75.         android:id="@+id/button3" 
  76.         android:layout_below="@+id/button2" 
  77.         android:layout_toRightOf="@+id/button2" 
  78.         android:nextFocusUp="@+id/button2" 
  79.         android:nextFocusLeft="@+id/button2" 
  80.         android:nextFocusRight="@+id/button4" 
  81.         android:nextFocusDown="@+id/button4"> 
  82.      
  83.     
  84.         style="@style/clockFaceNum" 
  85.         android:text="8" 
  86.         android:id="@+id/button8" 
  87.         android:layout_below="@+id/button9" 
  88.         android:layout_toRightOf="@+id/button9" 
  89.         android:nextFocusUp="@+id/button7" 
  90.         android:nextFocusLeft="@+id/button7" 
  91.         android:nextFocusRight="@+id/button9" 
  92.         android:nextFocusDown="@+id/button9"> 
  93.      
  94.     
  95.         style="@style/clockFaceNum" 
  96.         android:text="4" 
  97.         android:id="@+id/button4" 
  98.         android:layout_below="@+id/button3" 
  99.         android:layout_toLeftOf="@+id/button3" 
  100.         android:nextFocusUp="@+id/button3" 
  101.         android:nextFocusLeft="@+id/button3" 
  102.         android:nextFocusRight="@+id/button5" 
  103.         android:nextFocusDown="@+id/button5"> 
  104.      
  105.     
  106.         style="@style/clockFaceNum" 
  107.         android:text="7" 
  108.         android:id="@+id/button7" 
  109.         android:layout_below="@+id/button8" 
  110.         android:layout_toRightOf="@+id/button8" 
  111.         android:nextFocusUp="@+id/button6" 
  112.         android:nextFocusLeft="@+id/button6" 
  113.         android:nextFocusRight="@+id/button8" 
  114.         android:nextFocusDown="@+id/button8"> 
  115.      
  116.     
  117.         style="@style/clockFaceNum" 
  118.         android:text="5" 
  119.         android:id="@+id/button5" 
  120.         android:layout_below="@+id/button4" 
  121.         android:layout_toLeftOf="@+id/button4" 
  122.         android:nextFocusUp="@+id/button4" 
  123.         android:nextFocusLeft="@+id/button4" 
  124.         android:nextFocusRight="@+id/button6" 
  125.         android:nextFocusDown="@+id/button6"> 
  126.      
  127.     
  128.         style="@style/clockFaceNum" 
  129.         android:text="6" 
  130.         android:id="@+id/button6" 
  131.         android:layout_below="@+id/button5" 
  132.         android:layout_centerHorizontal="true" 
  133.         android:nextFocusUp="@+id/button5" 
  134.         android:nextFocusLeft="@+id/button5" 
  135.         android:nextFocusRight="@+id/button7" 
  136.         android:nextFocusDown="@+id/button7"> 
  137.      
  138.  

下图中是假定在键12开始按down键时的焦点切换顺序:

步骤4 设置界面的初始控件焦点

在每个页面加载时,可以设置界面中初始的控件焦点,以方便用户的定位操作,只需要在控件中加入即可。比如:

 
 
 
  1.         style="@style/clockFaceNum" 
  2.         android:text="12" 
  3.         android:id="@+id/button12" 
  4.         android:layout_alignParentTop="true" 
  5.         android:layout_centerHorizontal="true" 
  6.         android:nextFocusUp="@+id/button11" 
  7.         android:nextFocusLeft="@+id/button11" 
  8.         android:nextFocusRight="@+id/button1" 
  9.         android:nextFocusDown="@+id/button1"> 
  10.          
  11.      

小结

作为开发者,一定要记住由于Android设备的多样性,用户如何在界面上方便地进行输入或在不同的控件中来回切换是十分重要的,本文简单介绍了用户如何自定义控件的焦点切换顺序,这对于用户界面的体验是很有好处的。

文章标题:Android界面设计基础:控件焦点4个步骤
本文路径:http://www.shufengxianlan.com/qtweb/news22/188522.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联