首先看一下主界面的设计,首先要说的是搜索框,搜索框中包含“删除”按钮是怎么实现的。

  以前听说过是重写TextView可以实现这种效果,如google的搜索框,但我没有实现过,而我直接在布局文件中就解决掉了这个问题。

  

android主界面Ui android主界面英文_Layout

 

android主界面Ui android主界面英文_android主界面Ui_02

 

  当然啊,没有google做的美观,功能上也没有google的做的全面,一来是博主审美观天生缺陷,二来也是根据业务需求来的。

  那么我就介绍一下我的实现方式。

  RelativeLayout相对布局,RelativeLayout其内部的子组件的位置总是相对兄弟组件、父容器来决定的,因此叫做相对布局。上面的搜索框中包含一个TextView 和IamgeButton,search键先不要管,它不包含在RelativeLayout内,只看前面这两个控件,他们包含在RelativeLayout中,我这里先:

  1、确定RelativeLayout中组件的排列方式为水平排列,android:orientation="horizontal"

  2、将TextView 组件左对齐与其父组件(也就是RelativeLayout),android:layout_alignParentLeft="true"

  3、将IamgeButton组件放置在TextView的右边,android:layout_alignRight="@id/word"

  通过以上三步,就可以实现上面的样子。

1  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2                 android:orientation="horizontal"
 3                 android:layout_width="wrap_content" 
 4                 android:layout_height="wrap_content" 
 5                 android:gravity="center_vertical"
 6                 > 
 7                 <EditText 
 8                     android:id="@+id/word" 
 9                     android:layout_width="250dp" 
10                     android:layout_height="wrap_content" 
11                     android:textSize="18sp" 
12                     android:layout_alignParentLeft="true" 
13                     android:paddingRight="37px" 
14                     android:hint="@string/tishi"
15                     android:textColorHint="#55000000"/> 
16                 <ImageButton 
17                     android:id="@+id/delete_button" 
18                     android:background="@drawable/delete"
19                     android:scaleType="fitCenter" 
20                     android:layout_alignRight="@id/word" 
21                     android:layout_height="wrap_content" 
22                     android:layout_width="wrap_content" 
23                     android:layout_marginRight="10dp" 
24                     android:layout_marginTop="5dp"/> 
25             </RelativeLayout>

  其实,做布局最重要的是对各个属性的了解与掌握,比如layout__margin与padding之间的区别,layout_gravity与gravity之间的区别,在这里我就不说了,网上有很多的例子,但是对于初学者来说真的是搞不清的,(就像我),除非你想做一个专业级的UI。第二点就是细心,像字体大小的调节margin的调节都是一点一点调出来的,也跟自己个人经验少有关,关于这点,我觉的一定有必要知道px、dip(dp)、sp、in、mm、pt这些单位是怎么回事

  1、px(像素):每个px对应屏幕上的一个点。

  2、dip(dp device independent pixels 设备独立像素):一种基于屏幕密度的抽象单位,每英寸160点的显示器上 ,1dp=1px,随着屏幕密度的改变,dp与px的换算也会改变。屏幕密度一般分为240、160、120,你也可以根据实际开发在模拟器上修改你的屏幕密度。点击AVD Manager选择模拟器点details就可以看到了(1.6以上)。

  3、sp(scaled pixels 比例像素):主要处理字体大小,可以根据用户的字体大小首选项进行缩放。

  4、in(英寸):标准长度单位。

  5、mm(毫米):标准长度单位。

  6、pt(磅):标准长度单位,1/72英寸。

  

  好了,继续,关于内容显示的部分,这部分我的设计思路是这样的,当软件开启时,默认的界面是这样:什么内容也没有,当然也可以在后期,根据业务的需求在空白处添加一些连接,和一些功能模块。当在搜索框内添加了内容并Search后,在显示区内就有了内容。

android主界面Ui android主界面英文_android_03

android主界面Ui android主界面英文_Layout_04

  

  当初我实现这个功能的时候,是为每一个View 设置了android:visibility属性,然后在程序中去控制,这样每一个View都要设置一遍,实在麻烦,但当我无意间发现 Layout组件也有这个属性的时候,我才发现,我可以直接控制Layout的android:visibility,当然Layout也是View嘛,只是没有想到。还有,需要被控制的View都要放在这个Layout中才可以,离开这个Layout,人家就不负责了。这个布局代码没什么技术含量就不贴了。

  再说一下,ProgressBar,在进行网络访问,或者查询数据库时,都会有一定的耗时,为了给用户更好的体验,我们不仅在程序中用到Handler机制(后面会讲),也要在界面上做足功夫,那么ProgressBar就是一个很好的组件,让用户不会感觉程序在后台处理数据的无反应状态这段时间里,认为程序“挂掉”。

 

android主界面Ui android主界面英文_android_05

  ProgressBar的使用有简单的也有复杂的,它的表现形式也有很多种,比如进度条,还有像调节控件如经常见到的音量调节,未知耗时的读取等多种表现形式。关于具体的实现和用法大家可以查阅API或者上网查阅论坛资料,这里给大家一个同仁的链接供大家学习。

  http://www.eoeandroid.com/thread-1081-1-1.html

  如何在界面中间显示ProgressBar,并且在ProgressBar运行时,并且输入法调出,也不会改变ProgressBar的形状,我使用到了FrameLayout布局,因为当时由于直接在LinearLayout中居中显示,导致输入法调出时ProgressBar会变成椭圆形,被压扁了一样,是因为输入法从下向上调出时占领了ProgressBar的位置。

  FrameLayout帧布局,说白了这个布局的特点就是,在其内部所有的组件,都是重叠在一起的,一个压在一个身上,而主页面的整个根布局用的就是FrameLayout。也就是说,在FrameLayout内部的组件,他们都共享这一片大的区域,谁也不会影响到谁,玩过PS的同学应该能马上明白这个道理,那么,我只要设置ProgressBar在FrameLayout中center就可以了。在这个功能中,我同样设置了一个TextView来显示文字,看以看到TextView和ProgressBar是重叠在一起的,但他们谁也不会影响到谁,如同存在于同一个地点中的不同空间一样。

  关于布局,就说这么多了,我把整个页面的源码粘上。

android主界面Ui android主界面英文_xml_06

android主界面Ui android主界面英文_android主界面Ui_07

main

1 <?xml version="1.0" encoding="utf-8"?>
  2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3     android:layout_width="fill_parent"
  4     android:layout_height="fill_parent"
  5 >
  6     
  7     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  8         android:orientation="vertical"
  9         android:layout_width="fill_parent"
 10         android:layout_height="fill_parent"
 11         android:background="#ff373737">
 12     
 13         <LinearLayout 
 14              android:orientation="horizontal"
 15             android:layout_height="wrap_content"
 16             android:background="#ff7d899d"
 17             android:gravity="center_horizontal"
 18             android:layout_marginBottom="20.0dp"
 19             android:layout_marginTop="20.0dp"
 20             android:layout_width="match_parent">
 21            
 22             <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 23                 android:orientation="horizontal"
 24                 android:layout_width="wrap_content" 
 25                 android:layout_height="wrap_content" 
 26                 android:gravity="center_vertical"
 27                 > 
 28                 <EditText 
 29                     android:id="@+id/word" 
 30                     android:layout_width="250dp" 
 31                     android:layout_height="wrap_content" 
 32                     android:textSize="18sp" 
 33                     android:layout_alignParentLeft="true" 
 34                     android:paddingRight="37px" 
 35                     android:hint="@string/tishi"
 36                     android:textColorHint="#55000000"/> 
 37                 <ImageButton 
 38                     android:id="@+id/delete_button" 
 39                     android:background="@drawable/delete"
 40                     android:scaleType="fitCenter" 
 41                     android:layout_alignRight="@id/word" 
 42                     android:layout_height="wrap_content" 
 43                     android:layout_width="wrap_content" 
 44                     android:layout_marginRight="10dp" 
 45                     android:layout_marginTop="5dp"/> 
 46             </RelativeLayout>
 47             <ImageButton android:id="@+id/selectContent"
 48                     android:layout_height="wrap_content"
 49                     android:src="@drawable/toolbar_find"
 50                     android:layout_marginLeft="2.0dp"
 51                     android:scaleType="fitCenter" android:layout_width="wrap_content"/>
 52         </LinearLayout>
 53         
 54         <LinearLayout
 55             android:id="@+id/layout_showdetails"
 56             android:layout_width="match_parent"  
 57             android:layout_height="wrap_content" 
 58             android:orientation="vertical"
 59             android:visibility="gone">
 60             
 61             <RelativeLayout android:orientation="horizontal"
 62                 android:layout_width="fill_parent"
 63                 android:layout_height="wrap_content"
 64                 android:layout_margin="8dp">
 65                 
 66                 <TextView android:id="@+id/details"
 67                     android:layout_width="wrap_content"
 68                     android:layout_height="wrap_content"
 69                     android:textSize="18sp"
 70                     android:textStyle="bold"
 71                     android:textColor="#ffffff"
 72                     android:layout_alignParentLeft="true"
 73                     />
 74                 <ImageView android:id="@+id/speaker"
 75                     android:src="@drawable/speaker_button"
 76                     android:layout_gravity="right"
 77                     android:layout_alignParentRight="true"
 78                     android:layout_width="50dp" 
 79                     android:layout_height="50dp"/>
 80             </RelativeLayout>
 81             
 82             <TextView android:id="@+id/tilte_one"
 83                 android:layout_width="fill_parent"
 84                 android:layout_height="wrap_content"
 85                 android:text="☆基本翻译"
 86                 android:textColor="#ffffff"
 87                 android:background="#ff7d899d"
 88                 android:layout_margin="8dp"/>
 89             <TextView android:id="@+id/trans_content"
 90                 android:layout_width="fill_parent"
 91                 android:layout_height="wrap_content"
 92                 android:textSize="18sp"
 93                 android:layout_margin="8dp"
 94                 android:textStyle="bold"
 95                 android:textColor="#ffffff"/>
 96             <Button android:id="@+id/check_more"
 97                 android:layout_width="wrap_content"
 98                 android:layout_height="wrap_content"
 99                 android:layout_margin="8dp"
100                 android:text="@string/show_more"
101                 android:layout_gravity="right"/>
102         </LinearLayout>
103     </LinearLayout>    
104     <ProgressBar android:id="@+id/progressBar" 
105                 android:layout_width="wrap_content" 
106                 android:layout_height="wrap_content"
107                 android:indeterminate="true"
108                 android:layout_gravity="center"
109                 android:visibility="gone"/>
110     <TextView android:id="@+id/call_now" 
111             android:layout_width="wrap_content"
112             android:layout_height="wrap_content"
113             android:textSize="7sp"
114             android:layout_gravity="center"
115             android:text="@string/search_now"
116             android:textColor="#ffffff"
117             android:visibility="gone"/>
118 </FrameLayout>

  

  对于界面,还有许多的不足,比如用户点击图片按钮,按钮的表现我并没有处理,按理来说要用到<selector>资源,可是我却怎么也实现不了,也就不了了之了。由于Android提供的组件种类繁多,粗略计算有5个布局,10个基础组件,20左右的高级组件,有加上大量的属性学起来还真的很费劲,对于我来说唯一的方法就是多写多敲,查阅API。我们不可能把所有的组件与属性都能倒背如流,唯一能做的是了解Android组件的设计思想,然后展开自己天马行空的想象力,即便想到了却不知道怎么实现,也完全可以查阅资料,浏览论坛等手段现学现用。做界面如同搭积木,虽然每个人手上的积木都是相同的,但搭出来的却一人一样,只要功能实现,操作顺手人性,界面美观就足矣了。

 

  写博的目的主要是记录这段时间学习的内容,从头到尾的详细的做个总结,希望关注此博的同学能给我提一些更好的意见,帮助我学习。