- 浏览: 92578 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
wangyudong:
家里是拨号上网,不行的,找到了一个Holer工具,只需要配置一 ...
【如何通过广域网访问局域网的服务器?】 -
叮咚可乐名:
大数据就是这么任性第一季数据结构和算法http://pan.b ...
数据结构与算法-简介 -
戢_时光:
...
【Java集合之二】Set集合 -
lzg406:
HTTP默认方式下,使用持久连接。 这个值得推敲
【应用层】之一:HTTP协议与FTP协议 -
mute_:
特别腻害呢
正则表达式1:概念
本文围绕以下八个部分展开:
一、布局(Layout)
二、线性布局(Linear Layout)
三、相对布局(Relative Layout)
四、帧布局(Frame Layout)
五、表格布局(Table Layout)
六、网格布局(Grid Layout)
七、小结
附 补充代码
一、布局(Layout)
布局是不可见的容器(ViewGroup),它定义UI的可视化结构,通过布局参数(LayoutParams)定义子元素的尺寸、位置。
二、线性布局(Linear Layout)
子元素被排成一行或一列。使用orientation属性设置方向:horizontal(水平)、vertical(垂直)
1. 实现以下效果:
(1)新建 LinearLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在 strings.xml 中添加需要的文本。
(3)在主界面(activity_main.xml)中,放一个按钮,点击该按钮,可跳至该线性布局界面。
(4)在主活动(MainActivity)中写事件,实现点击主界面按钮,可跳至线性布局界面。
(5)在 activity_linear_layout.xml 中写该线性布局界面。
2. 权重
线性布局给子元素分配空间(宽或高)后,把剩余空间按比例分配给设置了 layout_weight 的元素。
当布局orientation="horizontal",设置子元素layout_width="0dp"
当布局orientation="vertical",设置子元素layout_height="0dp"
实现以下效果:
(1)新建 LinearLayout2Activity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该线性布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至线性布局界面。
(4)在 activity_linear_layout2.xml 中写该线性布局界面。
3. layout_gravity 和 gravity
layout_gravity:元素在父元素(布局)中的位置。
gravity:内容或子元素在元素(布局或控件)中的位置。
二者各自可以取的值如下:
实现以下效果:
(1)新建 LinearLayout3Activity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该线性布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至线性布局界面。
(4)在 activity_linear_layout3.xml 中写该线性布局界面。
三、相对布局(Relative Layout)
元素在相对位置显示。可相对父元素(布局),也可以相对兄弟元素。
可避免嵌套,保持简洁的层次结构,提升性能。
实现以下效果:
(1)新建 RelativeLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在 strings.xml 中添加需要的文本。
(3)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该相对布局界面。
(4)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至相对布局界面。
(5)在 activity_relative_layout.xml 中写该相对布局界面。
四、帧布局(Frame Layout)
子元素逐个放入栈中(会重叠),最后添加的子元素显示在最上面。
1. 实现以下效果:
(1)新建 FrameLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该帧布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至帧布局界面。
(4)在 activity_frame_layout.xml 中写该帧布局界面。
2. 实现以下效果:
(1)新建 FrameLayout2Activity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该线性布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至线性布局界面。
(4)在 activity_frame_layout2.xml 中写该线性布局界面。
五、表格布局(Table Layout)
表格布局没有边框,由多个TableRow(行)构成,每行有多个单元格(不能设置宽),其中可放置子元素。
表格布局是线性布局的子类,是嵌套的线性布局。
layout_column:设置子元素在行中的位置(从0开始)。
layout_span:合并多个单元格。
可以为单元格设置如下三种行为方式:
(1)Shrinkable:如果某列被设为Shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度。
(2)Stretchable:如果某个列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间。
(3)Collapsed:如果某个列被设为Collapsed,那么该列的所有单元格会被隐藏。
实现以下效果:
(1)新建 TableLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该表格布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至表格布局界面。
(4)在 activity_table_layout.xml 中写该表格布局界面。
六、网格布局(Grid Layout)
实现以下效果:
(1)新建 GridLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该网格布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至网格布局界面。
(4)在 activity_grid_layout.xml 中写该网格布局界面。
七、小结
1.线性布局和相对布局使用得最多。当需要排布规则的时候,才考虑网格布局;当后面的会覆盖前面的,才考虑帧布局。
2.线性布局最简单,可设置权重。
3.相对布局的控件,都写出其id(因为有互相的位置关系);其他布局最好也全部写,也可以看需要写。
4.使用相对布局或网格布局,可以避免线性布局的嵌套使用。
5.表格布局已经OUT了!使用网格布局代替。
附 补充代码
1. 主界面(activity_main.xml)
2.主活动(MainActivity)
一、布局(Layout)
二、线性布局(Linear Layout)
三、相对布局(Relative Layout)
四、帧布局(Frame Layout)
五、表格布局(Table Layout)
六、网格布局(Grid Layout)
七、小结
附 补充代码
一、布局(Layout)
布局是不可见的容器(ViewGroup),它定义UI的可视化结构,通过布局参数(LayoutParams)定义子元素的尺寸、位置。
二、线性布局(Linear Layout)
子元素被排成一行或一列。使用orientation属性设置方向:horizontal(水平)、vertical(垂直)
1. 实现以下效果:
(1)新建 LinearLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
<activity android:name=".LinearLayoutActivity" android:label="@string/title_activity_linear_layout" android:parentActivityName=".MainActivity" > </activity>
(2)在 strings.xml 中添加需要的文本。
<!--线性布局--> <string name="to">收件人</string> <string name="subject">主题</string> <string name="message">邮件内容</string> <string name="btn_save">存为草稿</string> <string name="btn_send">发送</string> <string name="title_activity_linear_layout">线性布局1</string>
(3)在主界面(activity_main.xml)中,放一个按钮,点击该按钮,可跳至该线性布局界面。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:id="@+id/btnLinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/title_activity_linear_layout" android:onClick="onClick"/> </LinearLayout>
(4)在主活动(MainActivity)中写事件,实现点击主界面按钮,可跳至线性布局界面。
package com.xiangdong.layout; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View view){ Intent intent = null; switch (view.getId()){ case R.id.btnLinearLayout: intent = new Intent(this,LinearLayoutActivity.class); break; } startActivity(intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
(5)在 activity_linear_layout.xml 中写该线性布局界面。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.android.layout.LinearLayoutActivity"> <EditText android:id="@+id/txtTo" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/to"/> <EditText android:id="@+id/txtSubject" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/subject" android:singleLine="true"/> <EditText android:id="@+id/txtMessage" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="top" android:hint="@string/message" android:inputType="textMultiLine"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btnSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/btn_save"/> <Button android:id="@+id/btnSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/btn_send"/> </LinearLayout> </LinearLayout>
2. 权重
线性布局给子元素分配空间(宽或高)后,把剩余空间按比例分配给设置了 layout_weight 的元素。
当布局orientation="horizontal",设置子元素layout_width="0dp"
当布局orientation="vertical",设置子元素layout_height="0dp"
实现以下效果:
(1)新建 LinearLayout2Activity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该线性布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至线性布局界面。
(4)在 activity_linear_layout2.xml 中写该线性布局界面。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="wrap_content" android:textColor="@android:color/white"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@android:color/holo_red_light" android:gravity="center" android:text="wrap_content" android:textColor="@android:color/white"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@android:color/holo_green_light" android:gravity="center" android:text="wrap_content" android:textColor="@android:color/white"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="wrap_content" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_red_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@android:color/holo_green_light" android:gravity="center" android:text="wrap_content" android:textColor="@android:color/white"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="wrap_content" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_red_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_green_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_red_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_green_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="100dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="width=100dp weight=1" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_red_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_green_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="100dp" android:layout_height="match_parent" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="width=100dp" android:textColor="@android:color/white"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="64dp" android:layout_marginTop="4dp" android:orientation="horizontal"> <TextView android:layout_width="100dp" android:layout_height="match_parent" android:layout_weight="0" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="width=100dp weight=0" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_red_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_green_light" android:gravity="center" android:text="1" android:textColor="@android:color/white"/> </LinearLayout> </LinearLayout>
3. layout_gravity 和 gravity
layout_gravity:元素在父元素(布局)中的位置。
gravity:内容或子元素在元素(布局或控件)中的位置。
二者各自可以取的值如下:
实现以下效果:
(1)新建 LinearLayout3Activity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该线性布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至线性布局界面。
(4)在 activity_linear_layout3.xml 中写该线性布局界面。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_green_light"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="top" android:layout_gravity="top" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_orange_light"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bottom" android:layout_gravity="bottom" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_green_light"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="left" android:layout_gravity="left" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_orange_light"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="right" android:layout_gravity="right" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_green_light"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="center_horizontal" android:layout_gravity="center_horizontal" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_orange_light"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="center_vertical" android:layout_gravity="center_vertical" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/holo_blue_light" android:gravity="center"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="使用了 gravity,而非 layout_gravity" /> </LinearLayout> </LinearLayout>
三、相对布局(Relative Layout)
元素在相对位置显示。可相对父元素(布局),也可以相对兄弟元素。
可避免嵌套,保持简洁的层次结构,提升性能。
实现以下效果:
(1)新建 RelativeLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在 strings.xml 中添加需要的文本。
<!--相对布局--> <string name="we_chat">微信</string> <string name="at_we_chat">\@we_chat</string> <string name="we_chat_time">11:28</string> <string name="reply">回复</string> <string name="forward">转发</string> <string name="content"> 1.可以发语音、文字消息、表情、图片、视频。30M流量可以收发上千条语音。 2.朋友圈,跟朋友们分享生活点滴。 3.摇一摇、查看附近的人,世界不再有陌生人。 4.扫一扫,可以扫商品条码、图书封面、CD封面,甚至扫描英文单词来翻译成中文。 5.公众帐号,用微信关注明星、看新闻、设提醒… </string> <string name="title_activity_relative_layout">相对布局</string>
(3)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该相对布局界面。
(4)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至相对布局界面。
(5)在 activity_relative_layout.xml 中写该相对布局界面。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.android.layout.RelativeLayoutActivity"> <ImageView android:id="@+id/imageView" android:layout_width="72dp" android:layout_height="72dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginRight="8dp" android:src="@drawable/we_chat"/> <TextView android:id="@+id/tvWeChat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/imageView" android:text="@string/we_chat" android:textSize="16sp"/> <TextView android:id="@+id/tvAtWeChat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/tvWeChat" android:paddingLeft="8dp" android:text="@string/at_we_chat" android:textSize="12sp"/> <TextView android:id="@+id/tvWeChatTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="@string/we_chat_time" android:textSize="12sp"/> <TextView android:id="@+id/tvContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/tvWeChat" android:layout_marginTop="4dp" android:layout_toRightOf="@+id/imageView" android:text="@string/content" android:textColor="@android:color/black" android:textSize="14sp"/> <Button android:id="@+id/btnReply" style="@android:style/Widget.Holo.Button.Borderless.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tvContent" android:layout_toLeftOf="@+id/tvAtWeChat" android:layout_toStartOf="@+id/tvAtWeChat" android:text="@string/reply" android:textColor="@android:color/holo_blue_dark" android:textSize="12dp"/> <Button android:id="@+id/btnForward" style="@android:style/Widget.Holo.Button.Borderless.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/tvContent" android:layout_toRightOf="@+id/btnReply" android:text="@string/forward" android:textColor="@android:color/holo_blue_dark" android:textSize="12dp"/> </RelativeLayout>
四、帧布局(Frame Layout)
子元素逐个放入栈中(会重叠),最后添加的子元素显示在最上面。
1. 实现以下效果:
(1)新建 FrameLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该帧布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至帧布局界面。
(4)在 activity_frame_layout.xml 中写该帧布局界面。
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="300dp" android:layout_height="300dp" android:layout_gravity="left|top" android:background="@android:color/holo_red_light" android:gravity="right|bottom" android:text="第一帧" android:textColor="@android:color/white" android:textSize="20sp"/> <TextView android:layout_width="250dp" android:layout_height="250dp" android:layout_gravity="left|top" android:background="@android:color/holo_green_light" android:gravity="right|bottom" android:text="第二帧" android:textColor="@android:color/white" android:textSize="20sp"/> <TextView android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="left|top" android:background="@android:color/holo_orange_light" android:gravity="right|bottom" android:text="第三帧" android:textColor="@android:color/white" android:textSize="20sp"/> </FrameLayout>
2. 实现以下效果:
(1)新建 FrameLayout2Activity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该线性布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至线性布局界面。
(4)在 activity_frame_layout2.xml 中写该线性布局界面。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="150dp" android:orientation="vertical"/> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@android:color/darker_gray" android:orientation="vertical"/> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="32dp" android:layout_marginTop="100dp" android:background="@android:color/holo_red_light" android:gravity="center" android:text="图片" android:textColor="@android:color/white" android:textSize="24sp"/> </RelativeLayout> </FrameLayout>
五、表格布局(Table Layout)
表格布局没有边框,由多个TableRow(行)构成,每行有多个单元格(不能设置宽),其中可放置子元素。
表格布局是线性布局的子类,是嵌套的线性布局。
layout_column:设置子元素在行中的位置(从0开始)。
layout_span:合并多个单元格。
可以为单元格设置如下三种行为方式:
(1)Shrinkable:如果某列被设为Shrinkable,那么该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度。
(2)Stretchable:如果某个列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间。
(3)Collapsed:如果某个列被设为Collapsed,那么该列的所有单元格会被隐藏。
实现以下效果:
(1)新建 TableLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该表格布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至表格布局界面。
(4)在 activity_table_layout.xml 中写该表格布局界面。
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:stretchColumns="*"> <TableRow android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/textView_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="8dp" android:gravity="right" android:text="姓名"/> <EditText android:id="@+id/editText_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_span="3" android:ems="10" android:inputType="textPersonName"/> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/textView_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="8dp" android:gravity="right" android:text="手机号"/> <EditText android:id="@+id/editText_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_span="3" android:inputType="phone"/> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/textView_gender" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="8dp" android:gravity="right|center_vertical" android:text="性别"/> <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_column="1" android:layout_span="3" android:orientation="horizontal"> <RadioButton android:id="@+id/radioButton_male" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="false" android:text="男"/> <RadioButton android:id="@+id/radioButton_female" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="false" android:text="女"/> </RadioGroup> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/textView_skill" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="0" android:layout_marginRight="8dp" android:gravity="right" android:text="专业技能"/> <CheckBox android:id="@+id/checkBox_android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:checked="false" android:text="Android"/> <CheckBox android:id="@+id/checkBox_ios" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="2" android:checked="false" android:text="iOS"/> <CheckBox android:id="@+id/checkBox_web" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="3" android:checked="false" android:text="Web"/> </TableRow> </TableLayout>
六、网格布局(Grid Layout)
实现以下效果:
(1)新建 GridLayoutActivity ,然后在 AndroidManifest.xml 配置文件中,添加返回主界面的功能。
(2)在主界面(activity_main.xml)中,加一个按钮,点击该按钮,可跳至该网格布局界面。
(3)在主活动(MainActivity)中加一个switch判断的事件,实现点击主界面按钮,可跳至网格布局界面。
(4)在 activity_grid_layout.xml 中写该网格布局界面。
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="4" android:padding="16dp" android:rowCount="4" android:useDefaultMargins="true"> <TextView android:id="@+id/textView_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="0" android:layout_gravity="right" android:layout_row="0" android:text="姓名"/> <EditText android:id="@+id/editText3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:layout_row="0" android:ems="10" android:inputType="textPersonName"/> <TextView android:id="@+id/textView_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="0" android:layout_gravity="right" android:layout_row="1" android:text="手机号"/> <EditText android:id="@+id/editText4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:layout_row="1" android:ems="10" android:inputType="phone"/> <TextView android:id="@+id/textView_gender" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="0" android:layout_gravity="right|center_vertical" android:layout_row="2" android:text="性别"/> <RadioGroup android:layout_width="match_parent" android:layout_height="match_parent" android:layout_column="1" android:layout_columnSpan="3" android:layout_row="2" android:orientation="horizontal"> <RadioButton android:id="@+id/radioButton_male" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="false" android:text="男"/> <RadioButton android:id="@+id/radioButton_female" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="false" android:text="女"/> </RadioGroup> <TextView android:id="@+id/textView_skill" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="0" android:layout_gravity="right" android:layout_row="3" android:text="专业技能"/> <CheckBox android:id="@+id/checkBox_android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_row="3" android:checked="false" android:text="Android"/> <CheckBox android:id="@+id/checkBox_ios" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="2" android:layout_row="3" android:checked="false" android:text="iOS"/> <CheckBox android:id="@+id/checkBox_web" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="3" android:layout_row="3" android:checked="false" android:text="Web"/> </GridLayout>
七、小结
1.线性布局和相对布局使用得最多。当需要排布规则的时候,才考虑网格布局;当后面的会覆盖前面的,才考虑帧布局。
2.线性布局最简单,可设置权重。
3.相对布局的控件,都写出其id(因为有互相的位置关系);其他布局最好也全部写,也可以看需要写。
4.使用相对布局或网格布局,可以避免线性布局的嵌套使用。
5.表格布局已经OUT了!使用网格布局代替。
附 补充代码
1. 主界面(activity_main.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:id="@+id/btnLinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/title_activity_linear_layout" android:onClick="onClick"/> <Button android:id="@+id/btnLinearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="@string/title_activity_linear_layout2"/> <Button android:id="@+id/btnLinearLayout3" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="@string/title_activity_linear_layout3"/> <Button android:id="@+id/btnRelativeLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/title_activity_relative_layout" android:onClick="onClick"/> <Button android:id="@+id/btnFrameLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="@string/title_activity_frame_layout"/> <Button android:id="@+id/btnFrameLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="@string/title_activity_frame_layout"/> <Button android:id="@+id/btnTableLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="@string/title_activity_table_layout"/> <Button android:id="@+id/btnGridLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="@string/title_activity_grid_layout"/> </LinearLayout>
2.主活动(MainActivity)
package com.xiangdong.layout; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View view){ Intent intent = null; switch (view.getId()){ case R.id.btnLinearLayout: intent = new Intent(this,LinearLayoutActivity.class); break; case R.id.btnLinearLayout2: intent = new Intent(this, LinearLayout2Activity.class); break; case R.id.btnLinearLayout3: intent = new Intent(this, LinearLayout3Activity.class); break; case R.id.btnRelativeLayout: intent = new Intent(this,RelativeLayoutActivity.class); break; case R.id.btnFrameLayout: intent = new Intent(this, FrameLayoutActivity.class); break; case R.id.btnFrameLayout2: intent = new Intent(this, FrameLayout2Activity.class); break; case R.id.btnTableLayout: intent = new Intent(this, TableLayoutActivity.class); break; case R.id.btnGridLayout: intent = new Intent(this, GridLayoutActivity.class); break; } startActivity(intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
发表评论
-
【攻克Android (43)】WebView (网络视图)
2015-09-09 22:15 1264本文围绕以下两个部分展开: 一、WebView WebVi ... -
WebView (网络视图)
2015-09-09 22:12 0本文围绕以下两个部分展开: 一、WebView WebVi ... -
【攻克Android (41)】HttpURLConnection
2015-09-08 17:43 1393本文围绕以下三个部分展开: 一、HttpURLConnec ... -
HttpURLConnection
2015-09-08 17:42 0本文围绕以下三个部分展开: 一、HttpURLConnec ... -
【攻克Android (40)】JSON解析
2015-09-07 20:49 1289本文围绕以下三个部分 ... -
JSON解析
2015-09-07 20:47 0本文围绕以下三个部分 ... -
【攻克Android (39):XML解析之四】Simple方式解析XML
2015-08-27 18:38 1773本文围绕以下三个部分 ... -
【攻克Android (38):XML解析之三】Pull方式解析XML
2015-08-27 09:25 1769本文围绕以下两个部分展开: 一、Pull解析 案例一:P ... -
【攻克Android (37):XML解析之二】SAX方式解析XML
2015-08-26 15:15 898本文围绕以下两个部分展开: 一、SAX解析 案例一 ... -
【XML解析之一】SAX方式解析XML
2015-08-26 02:58 0本文围绕以下四个部分展开: 一、SAX解析 案例一 ... -
【攻克Android (36):XML解析之一】DOM方式解析XML
2015-08-26 00:27 972本文围绕以下三个部分展开: 一、XML概述 二、DOM解析 ... -
DOM方式解析XML案例
2015-08-26 00:26 0本文围绕以下四个部分展开: 一、DOM解析 案例一 ... -
【XML解析之四】Simple方式解析XML
2015-08-27 18:36 0本文围绕以下三个部分 ... -
【XML解析之一】Pull方式解析XML
2015-08-26 02:56 0本文围绕以下四个部分展开: 一、Pull解析 案例一:P ... -
【攻克Android (22)】View/Tween Animation 视图动画(补间动画)
2015-08-25 21:22 893本文围绕以下四个部分 ... -
【攻克Android (22)】View/Tween Animation 视图动画(补间动画)
2015-08-25 21:21 0本文围绕以下四个部分 ... -
【攻克Android (45)】四大组件之 ContentProvider
2015-08-18 16:24 1145本文围绕以下两个部分展开: 一、ContentProvide ... -
【攻克Android (32)】Notification 通知
2015-08-17 19:57 982本文围绕以下两个部分展开: 一、通知 案例一 一 ... -
Notification 通知
2015-08-17 19:56 0本文围绕以下两个部分展开: 一、通知 案例一 一 ... -
BroadcastReceiver完整版
2015-08-17 13:15 0本文围绕以下四个部分展开: 一、广播 案例一:系统广播(属于 ...
相关推荐
【攻克Data动态获取网页评论,保存数据库】是一个关于利用特定工具——攻克Data,来抓取网页上的评论数据并存储到数据库的过程。这个过程涉及到网络爬虫技术、JSON解析以及数据库管理等多个IT领域的知识点。 1. **...
【大学生攻克Linux系统教程】 本教程专为对Linux操作系统感兴趣的初学者设计,旨在提供一个从零开始学习Linux的全面指南。教程内容涵盖了Linux系统的安装、基本操作、文本编辑器VI的使用、调试工具GDB的基础知识,...
根据提供的信息,“24学时攻克C++”这本书旨在通过一系列高效的学习计划帮助读者在较短的时间内掌握C++编程语言。尽管仅上传了23页的内容,我们仍然可以从书名、描述以及部分可见的内容中推断出一些关键知识点。 ##...
【备战2014】高考历史 精讲巧解分类攻克5
5. **模板与泛型编程**:C++的模板可以用于创建函数和类,以实现泛型编程,使代码更具通用性,适应不同数据类型的处理。 6. **异常处理**:通过try-catch语句,你可以捕获并处理运行时可能出现的错误,提高程序的...
通过对H5活动宣传页的布局难点进行逐一攻克,本文提出了一套相对通用的技术解决方案。通过合理运用CSS的`background-size`、SCSS封装的`object-wrap` mixin以及响应式设计原理,可以有效地解决H5页面在不同设备上的...
“Fanfoudroid”展示了如何利用Android的布局组件、自定义View以及动画效果来构建美观且响应迅速的界面。例如,滑动刷新、下拉加载更多、时间线布局等常见功能的实现,都可以从源码中找到答案。 论文写作是毕业设计...
BCB5即Borland C++ Builder 5,是一款功能强大的C++集成开发环境。通过BCB5创建并运行第一个C++程序——“Hello World!”,不仅可以帮助初学者熟悉开发环境的基本操作流程,还能加深对C++语法基础的理解。 ### 2. ...
标题中的“新东方8天攻克8000单词...5. 系统化的词汇学习:通过词根构建单词之间的联系,形成词汇网络,促进长期记忆。 这些方法和策略结合使用,旨在帮助英语学习者在短时间内高效掌握大量词汇,提升英语综合能力。
大学生攻克Linux系统教程(又名天下没有难学的Linux)。一位在校大学生整理的教程,献给每一位要征服Linux的学习者-五星级的Linux教程。 本书汇集众多Linux学习者的心血与贡献,有很多作者在默默的为你呼喊,感谢...
8天攻克8000词汇,word版,方便学习,背单词的好东东
在Android平台上实现自动来电录音是一项技术挑战,但并非无法攻克。Android系统提供了丰富的API和工具,使得开发者可以创建各种功能丰富的应用,包括来电录音。在本文中,我们将深入探讨如何利用Android的...
在学习编程语言C++的过程中,24学时的课程安排是一个相当常见的学习进度,这个压缩包文件名为"24学时攻克C++源码及习题答案",显然是为初学者设计的一套完整教程。C++是面向对象编程的重要语言,它的强大功能和广泛...
【备战2014】高考英语精讲巧解分类攻克5主要关注的是英语语法中的动词和动词短语的应用,特别是它们与不定式、动名词以及现在分词搭配使用的情况。这部分内容对于提高学生的语言运用能力和理解能力至关重要,因为...
【备战2014】高考生物 精讲巧解分类攻克5主要涵盖了高中生物中的遗传学基础知识,包括性状的显隐性判断、基因分离定律的理解及其应用、遗传概率的计算以及遗传方式的判断。以下是相关知识点的详细说明: 1. **性状...
使用XML布局文件定义界面元素,以及ConstraintLayout等布局容器来组织界面。 - **需求分析**:通过对目标用户群体的研究,确定软件的核心功能包括但不限于单词学习、背诵、测试等功能。此外,还需要考虑到数据同步、...
5. **实际案例分析**:通过分析具体的案例或问题,加深对Android Framework中各个部分的理解和运用能力。 #### 五、总结 深入学习Android Framework是一个长期且持续的过程。通过系统的学习,开发者不仅可以增强...
1. **用户界面与工作环境**:UGNX3.0的用户界面包括菜单栏、工具栏、工作区、视图控制区等,理解这些元素的功能布局对于高效操作至关重要。 2. **建模基础**:涵盖实体建模、曲面建模和线框建模,学习如何创建基本...
本文将重点解析“40天攻克大学英语四级”中的核心知识点,尤其是关于作文和翻译部分的倒装句技巧。 倒装句是英语写作中的一种高级表达方式,它能够使句子更具表现力,提升文章的层次感。倒装句分为完全倒装和部分倒...