用代码教你入门android--2 布…

来源:互联网 发布:梦幻群侠传三优化版 编辑:程序博客网 时间:2024/06/06 23:16

转载请注明原作者:@author:huanglei_jmr http://blog.sina.com.cn/u/3113060227

接下讲布局:注意复杂的布局我们不用activity代码来写,都写在xml中咯!

下面的每种布局我都在layout文件夹中建立一个androidxml文件,来写布局,然后再main.activity

// super.setContentView(R.layout.datadisplay);//table布局

// super.setContentView(R.layout.relativelayoutdemo);//relative布局

   super.setContentView(R.layout.mutilylayout);//嵌套布局

但是讲布局之前要先讲一个重要的东西,是所有布局都拥有的LayoutParams

在每个布局的activity代码中我们都会看见一行这样的代码:TableLayout layout new TableLayout(this);// 定义布局管理器  

TableLayout.LayoutParams layoutParams new TableLayout.LayoutParams ViewGroup.LayoutParams.FILL_PARENT,   ViewGroup.LayoutParams.FILL_PARENT);// 定义布局管理器参数 

为什么要这样做呢?解释LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout(如将TextView添加到TableLayout 这里TextView就相当于TableLayout 的子视图,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。
     
可以这样去形容LayoutParams,在象棋的棋盘上,每个棋子都占据一个位置,也就是每个棋子都有一个位置的信息,如这个棋子在44列,这里的“44就是棋子的LayoutParams
     
LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
      1
,一个确定的值;
     2
FILL_PARENT,即填满(和父容器一样大小);
     3
WRAP_CONTENT,即包裹住组件就好。

LayoutParams继承于Android.View.ViewGroup.LayoutParams

11:线性布局:LinearLayout ,上面有过布局的介绍,即所有的布局都是以一行或者一列的形式进行显示的!

 

 

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   android:orientation="horizontal" >

 

12FrameLayout框架布局:框架布局管理器是将组件都放在屏幕的左上角,所有的组件是层叠显示的!什么叫层叠,有啥用:比如播放器页面上的播放箭头就是一个button层叠摆放的!

13TableLayout(常用)在TableLayout中,我们也有对应的TableRow来表示表格的一行。但在Android中就不往下区分表格单元了,也就是没有相应的

<</SPAN>TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:shrinkColumns="2" //意思是下面表头的id2的可以多行显示,一般数据太多就选此

   android:collapseColumns="0,3" //面表头的id0 3的不显示了

    >

<</SPAN>TableRow>

       

       <</SPAN>TextView

           android:layout_column="0"

           android:gravity="center_horizontal"

           android:padding="10dp"

           android:text="序号" />

       <</SPAN>TextView

           android:layout_column="1"

           android:gravity="center_horizontal"

           android:padding="10dp"

           android:text="姓名" />

      …………………………..

分割线-à

  <</SPAN>View

       android:layout_height="2dp"

       android:background="#FDF5E6" />

   

   <</SPAN>TableRow>

       <</SPAN>TextView

           android:layout_column="0"

           android:gravity="center_horizontal"

           android:padding="5dp"

           android:text="001"/>

       <</SPAN>TextView

           android:layout_column="1"

           android:gravity="center_horizontal"

           android:padding="10dp"

           android:text="jmr" />

      …………………………………………….

   </</SPAN>TableRow>

14:view标签:所有GUI的父类,可以表示任何的组件,下面的代码效果如HTML中的


元素效果,设置宽度是2dp,颜色为#FDF5E6

<</SPAN>View

       android:id="@+id/xx"

       android:layout_height="2dp"

       android:background="#FDF5E6" />

15RelativeLayout相对布局管理器是基于一个参考点而言的布局管理器。就像Web开发中的相对路径的概念,是基于一定的参考点而创建的。在Android中的相对布局管理器就是在一个参考点的四周(上,下,左,右)布局的管理器。

怎么相对呢?

在某个组件中加上: android:layout_toRightOf="@+id/img1" 就是相对于组件@+id/img1右边放置

当然可以推测还有 android:layout_below

activity中就这样   params.addRule(RelativeLayout.BELOW, R.id.btn);// 设置放置规则,将此layout放置在 R.id.btn下方

这种布局的好处是自己可以多调节,比如那个角落还有空就在哪个角落中用相对的布局来进行配置,可以设置上下左右的相对位置达到比较精确的放置位置!

16AbsoluteLayout绝对布局管理器。这和CSS中的定位布局是类似的。CSS中我们可以通过相对布局管理器对HTML元素进行布局,也可以通过绝对布局定位通过指定top,left等属性来为元素进行布局。而在Android之中,我们还有一个绝对布局管理器可以做到同样的效果。
   首先说明绝对布局管理器是已经在Android2.3之后被废弃了,是不建议使用的。但绝对布局管理器却是布局管理器中最早的一种,下面来看一下绝对布局管理器的文档
!为甚被遗弃,因为推荐相对布局,哈哈 ,下面就叫绝对!因为我们无法预知运行程序的设备实际情况,如果我们定义坐标,很可能我们的程序是不能正常显示的。所以在Android2.3之后该布局管理器就被废除了。

android:layout_x="40dp" 

android:layout_y="10dp" 

17:上面讲了这么多,终于讲到屌处了:布局管理器的嵌套

布局管理器的嵌套就是将多种布局管理器混合使用,以达到复杂布局的排版效果。如果一个布局页面效果复杂,可能使用一种布局管理器无法完成,那么我们就需要将多种布局管理器嵌套起来以达到显示效果。在Web开发中,编写的CSS基本都是设置嵌套元素的样式的,这个理念是类似的。

注意在嵌套布局管理器时我们要注意设置各个布局管理器的layout_height为包裹高度,而不能设置成为填充屏幕,否则该布局管理器就会占据剩余屏幕整个内容,而其它的布局管理器将无法显示。
   在嵌套布局管理器时,页面的排版已经非常的复杂了,而若想使用Java代码对其进行控制,这个难度就已经很大了,所以在复杂布局管理器下不建议再编写Java代码来控制了,使用XML文件来布局是比较简单的方式。

18:中级视图组件DatePicker和时间选择器TimePicker

DatePickerFrameLayout的子类,也就是说它的内部实现使用了框架布局TimePicker也是

上面我一直怀疑@+id/name 这后面的idname是不是应该有关键字的,比如,哦不对不对,是没有的,随意取得,究竟取那个组件还的看标签名,如<</SPAN>DatePicker 而不要靠id来识别组件类别!

上面布局就基本上讲完了!!

原创粉丝点击