所有的布局文件都res/layout下面,你可以选择新建xml文件来新建布局。点击进入编辑。在下方有两个可以切换的地方,点击graphical Layout可以看到效果,单击xml可以看到编辑的文件
这里以原始的helloword为例
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.helloworld.MainActivity" > <TextView android:id="+id/tv_helloword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </LinearLayout>
在写布局文件之前要理解一个事,布局设置的属性是非常合理的,和一个人要画一幅画的过程是一样的,不要觉得属性设置的很奇怪。
首先看最外层的LinearLayout.忽略xmlns这些和命名空间有关的东东,只看布局相关。LinearLayout是线性布局,顾名思义就是要线一样来排列,类似的有RelativeLayout(相对布局),FrameLayout(帧布局),GridLayout(网格布局),AbsoluteLayout(绝对布局)等,这些都是类似壳子一样的东西,它们决定了里面包裹的控件是怎么排列的。
无论是layout还是TextView,Button这样的控件,要显示在屏幕上,肯定是要知道它的大小的,而android控件的大小是与其父母紧密相关,当然也可以指定具体的数值。android:layout_width 是布局的宽度,android:layout_height是布局的高度。不指定具体的数值会有三个选项供选择fill_parent,match_parent,wrap_content,其中fill_parent和match_parent都是一样的效果,即最大的化的填充父母布局。fill_parent是比较老的参数,如果要填充父母布局,一般就选择match_parent,而wrap_parent则是自适应父母,由系统来决定你的控件相对于父母布局有多大。
既然是设置大小,肯定是可以指定数值的,比如100px,100dp等,单位不同,带来的效果不同,dp单位叫设备无关像素,px单位就是像素单位,一个Px就是一个像素,多数情况下选择dp,因为Android手机的屏幕大小是很不一致的,如果选择px为单位会使得视图的效果感很差,关于什么叫dp,px如果要细细说明又可以写上一篇,这里就暂时跳过。
知道了大小,有时候需要引用到这个控件或者布局,这时候就得知道它的唯一标识。设置唯一标识的方式为android:id="+id/xxxx",后面的xxxx为自定义的名字,给这个布局或者控件命名。如果根本引用不到这个控件或者布局就没有定义标识的必要。
理论上除了布局的大小是一定要有的,其它的都是可选的。根据实际情况,linearLayout既然是线程布局,就可以横着排列,或者竖着排列。LinearLayout由 android:orientation来设置是何种方式,两个选择,一个是"vertical",一个是“horizontal”默认情况是horizontal.看代码和效果
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.helloworld.MainActivity" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </LinearLayout>
效果:
以上是水平是,垂直的代码部分就只是android:orientation = "horizontal"
效果图: