android原生界面太烦了,Android进阶(二十七)Android原生扰人烦的布局
Android原生扰人烦的布局
在开发Android应用时,UI布局是一件令人烦恼的事情。下面主要讲解一下Android中的界面布局。
一、线性布局(LinearLayout)
线性布局分为:
(1)垂直线性布局;
(2)水平线性布局;
针对这两种区别,只是一个属性的区别
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
水平线性布局的话,android:orientation="horizontal" 即可。
二、 相对布局(RelativeLayout)
一般线性布局满足不了们实际项目中的需要,就是一般做Web界面的UI设计一样,也是存在相对元素的一些CSS样式的布局。RelativeLayout参数有:Width,Height,Below,AlignTop,ToLeft,Padding,和MerginLeft。
关键源码:
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请输入:"/>
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background"
android:layout_below="@id/label"/>
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:text="确定" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"
android:text="取消" />
其中,android:layout_below=”@id/label”设置了EditText处于TextView下方;在Button中android:layout_below=”@id/entry”设置该Button位于EditText下。
实例效果:
三、表单布局(TableLayout)
TableLayout由许多TableRow组成,每个TableRow都会定义一个Row。TableLayout容器不会显示Row,Column或Cell的边框线,每个Row拥有0个或多个Cell,每个Cell拥有一个View对象。表格由行和列组成许多单元个,允许单元格为空。但是单元格不能跨列,这与Html不同。
android:layout_height="2dip"
android:background="#FF909090" />
android:text="*"
android:padding="3dip" />
android:text="导入..."
android:padding="3dip" />
android:text="*"
android:padding="3dip" />
android:text="导出..."
android:padding="3dip" />
android:text="Ctrl-E"
android:gravity="right"
android:padding="3dip" />
实例效果:
android:gravity="center" 书面解释是权重比。其时就是让它居中显示。
android:stretchColumns="1,2,3,4" 它的意思就是自动拉伸1,2,3,4列。
注
若需实现组件居中显示,布局应如下:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
TableRow平分列
每一列的宽度设置为android:layout_width="0.0dip",在设置每一列的android:layout_weight=“1”
因为ayout_weight是将剩余空间按权重分配,而不是将全部空间按权重分配。
代码如下:
android:paddingTop="15px">
android:id="@+id/Register"
android:text="@string/register"
android:layout_width="0.0dip"
android:layout_weight="1"
android:onClick="register"/>
android:id="@+id/cancel"
android:layout_width="0.0dip"
android:layout_weight="1"
android:text="@string/button_cancel" />
视图如下:
四、切换卡(TabWidget)
切换卡经常用在一下选项上,类似于电话簿界面,通过多个标签切换显示不同内容。而其中,TabHost是一个用来存放Tab标签的容器,通过getTabHost方法来获取TabHost的对象,通过addTab方法向容器里添加Tab。Tab在切换时都会产生一个事件,可以通过TabActivity的事件监听setOnTabChangedListener.
【扩展点】TabHost
类概述
提供选项卡(Tab页)的窗口视图容器。此对象包含两个子对象:一组是用户可以选择指定Tab页的标签;另一组是FrameLayout用来显示该Tab页的内容。个别元素通常控制使用这个容器对象,而不是设置在子元素本身的值。
(译者madgoat注:即使使用的是单个元素,也最好把它放到容器对象ViewGroup里)
内部类
interface TabHost.OnTabChangeListener
接口定义了当选项卡更改时被调用的回调函数
interface TabHost.TabContentFactory
当某一选项卡被选中时生成选项卡的内容
class TabHost.TabSpec
单独的选项卡,每个选项卡都有一个选项卡指示符,内容和tag标签,以便于记录.。
关键源码
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is a tab" />
android:id="@+id/textview2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is another tab" />
android:id="@+id/textview3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is a third tab" />
处理类
//声明TabHost对象
TabHost mTabHost;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得TabHost对象
mTabHost = getTabHost();
/* 为TabHost添加标签 */
//新建一个newTabSpec(newTabSpec)
//设置其标签和图标(setIndicator)
//设置内容(setContent)
mTabHost.addTab(mTabHost.newTabSpec("tab_test1")
.setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1))
.setContent(R.id.textview1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2")
.setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2))
.setContent(R.id.textview2));
mTabHost.addTab(mTabHost.newTabSpec("tab_test3")
.setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3))
.setContent(R.id.textview3));
//设置TabHost的背景颜色
mTabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));
//设置TabHost的背景图片资源
//mTabHost.setBackgroundResource(R.drawable.bg0);
//设置当前显示哪一个标签,默认下标从0开始
mTabHost.setCurrentTab(0);
//标签切换事件处理,setOnTabChangedListener
mTabHost.setOnTabChangedListener(new OnTabChangeListener(){
public void onTabChanged(String tabId) {
Dialog dialog = new AlertDialog.Builder(Examples_04_29Activity.this)
.setTitle("提示")
.setMessage("当前选中:"+tabId+"标签")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
dialog.cancel();
}
}).create();//创建按钮
dialog.show();
}
});
}
实例效果:
参考文献
美文美图
文章来源: shq5785.blog.csdn.net,作者:No Silver Bullet,版权归原作者所有,如需转载,请联系作者。
原文链接:shq5785.blog.csdn.net/article/details/51811816
android原生界面太烦了,Android进阶(二十七)Android原生扰人烦的布局相关推荐
- Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示
SurfaceFlinger对象建立过程示意 1 SurfaceSession的建立 客户端请求建立Surface时,首先在要与SurfaceFlinger建立一个Session,然后再 ...
- mysql进阶(二十七)数据库索引原理
文章目录 一.前言 二.数据结构及算法理论 2.1 B+树 2.2 二叉查找树 2.3 AVL树 2.4 B+树的特性 三.聚集索引.非聚集索引 3.1 聚集索引 3.2 非聚集索引 一.前言 本文主 ...
- 前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP
目录 缘由 原生Swagger Knife4J 缘由 接口文档想必是许多开发小伙伴的噩梦,不仅要写详细,还要及时维护文档与后端代码保持一致,稍有没及时更新接口文档,前端同学肯定会抱怨后端同学给的文档与 ...
- Android Studio 界面设计和运行的不一样
Android Studio 界面设计和运行的不一样 初学Android开发,记录一下遇到的问题,及解决方法 在Android studio 设置界面拖拽控件到视图区,设计界面是这样的 运行虚拟机看到 ...
- 二、Android界面开发
传送门 <一.Android Studio的安装和使用> <二.Android界面开发> <三.Android网络开发> <四.狗狗大全应用实战> 视频 ...
- android自定义Dcloud插件,调用android原生界面并获取返回数据
由于工作的需要,所以我接触到了Dcloud这个我不是很愿意接触的东西.Dcloud也是Webapp的一个工具,同样也可以用来做原生android的插件.比较一下Dcloud和Cordova的优缺点: ...
- android没有界面app,Android离线打包 app处于原生界面 切换到桌面再点击app 原生界面被关闭...
Android离线打包环境, 当app打开原生界面时,点击Home键到桌面,然后点击桌面图标打开app,原生界面被关闭,无论原生界面层级多少,都是返回到io.dcloud.PandoraEntry这个 ...
- android原生代码转h5,Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。...
当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID: 大概就是点击H5界面跳转到Androi ...
- android4.2 原生设置,干净整洁Android 4.2原生界面_手机Android频道-中关村在线
里奥1080P-N003在系统方面采用了Android 4.2版本,在界面上保持了原生的UI界面,在系统的整体流畅性上有一定的保障,并且相对于大部分定制ROM来说,看起来更加简洁,当然对于这方面笔者认 ...
最新文章
- Linux机器建立密钥信任
- 探索 Linux 内存模型--转
- Keepalived配置与使用--转载
- leetcode与python进阶学习总结
- h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
- ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车红外遥控实验
- 2048游戏c语言linux简易代码,C语言实现2048游戏代码
- 大数据?人工智能?揭秘银行数据仓库发展趋势
- c语言创建文件的作用,c语言文件创建与建立
- c盘local文件太大_win7 c盘清理的方法教程
- 禁用和卸载树莓派 4B 上 avahi-daemon
- zk集群和clickhouse集群搭建
- 对标RTX 3060,英特尔独显或将迎来第一波主流游戏玩家
- sqlrelay mysql_sql relay 使用
- Killer Names( 容斥定理,快速幂 )
- 计算机的诞生以及四个发展阶段,计算机发展历史的四个阶段
- xRM 扩展性及产品组合
- hive 计算个人的累计金额占比
- 测试分析与测试用例设计方法
- Android 屏幕适配全攻略
热门文章
- 在python将字符串中的空格转换为下划线_如何将下划线替换为空格,反之亦然?...
- VB个性签名——在图片上写字
- MMDetection(四):在自己的数据集上训练模型
- r 语言ylim = c(0 1),小白R语言数据可视化进阶练习一
- vnc移植_【安富莱】开源原创高级玩法,用F429接SDRAM虚拟远程VNC桌面
- 上班摸鱼看小说的最佳软件
- 新版导航条stacknavigator
- Java数据结构之基于ArrayList编写大众麻将和扑克牌洗牌小练习
- 黑羽压测 做 API接口功能测试
- java-jar启动jar包