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原生扰人烦的布局相关推荐

  1. Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示

           SurfaceFlinger对象建立过程示意 1 SurfaceSession的建立 客户端请求建立Surface时,首先在要与SurfaceFlinger建立一个Session,然后再 ...

  2. mysql进阶(二十七)数据库索引原理

    文章目录 一.前言 二.数据结构及算法理论 2.1 B+树 2.2 二叉查找树 2.3 AVL树 2.4 B+树的特性 三.聚集索引.非聚集索引 3.1 聚集索引 3.2 非聚集索引 一.前言 本文主 ...

  3. 前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP

    目录 缘由 原生Swagger Knife4J 缘由 接口文档想必是许多开发小伙伴的噩梦,不仅要写详细,还要及时维护文档与后端代码保持一致,稍有没及时更新接口文档,前端同学肯定会抱怨后端同学给的文档与 ...

  4. Android Studio 界面设计和运行的不一样

    Android Studio 界面设计和运行的不一样 初学Android开发,记录一下遇到的问题,及解决方法 在Android studio 设置界面拖拽控件到视图区,设计界面是这样的 运行虚拟机看到 ...

  5. 二、Android界面开发

    传送门 <一.Android Studio的安装和使用> <二.Android界面开发> <三.Android网络开发> <四.狗狗大全应用实战> 视频 ...

  6. android自定义Dcloud插件,调用android原生界面并获取返回数据

    由于工作的需要,所以我接触到了Dcloud这个我不是很愿意接触的东西.Dcloud也是Webapp的一个工具,同样也可以用来做原生android的插件.比较一下Dcloud和Cordova的优缺点: ...

  7. android没有界面app,Android离线打包 app处于原生界面 切换到桌面再点击app 原生界面被关闭...

    Android离线打包环境, 当app打开原生界面时,点击Home键到桌面,然后点击桌面图标打开app,原生界面被关闭,无论原生界面层级多少,都是返回到io.dcloud.PandoraEntry这个 ...

  8. android原生代码转h5,Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。...

    当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID:  大概就是点击H5界面跳转到Androi ...

  9. android4.2 原生设置,干净整洁Android 4.2原生界面_手机Android频道-中关村在线

    里奥1080P-N003在系统方面采用了Android 4.2版本,在界面上保持了原生的UI界面,在系统的整体流畅性上有一定的保障,并且相对于大部分定制ROM来说,看起来更加简洁,当然对于这方面笔者认 ...

最新文章

  1. Linux机器建立密钥信任
  2. 探索 Linux 内存模型--转
  3. Keepalived配置与使用--转载
  4. leetcode与python进阶学习总结
  5. h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
  6. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车红外遥控实验
  7. 2048游戏c语言linux简易代码,C语言实现2048游戏代码
  8. 大数据?人工智能?揭秘银行数据仓库发展趋势
  9. c语言创建文件的作用,c语言文件创建与建立
  10. c盘local文件太大_win7 c盘清理的方法教程
  11. 禁用和卸载树莓派 4B 上 avahi-daemon
  12. zk集群和clickhouse集群搭建
  13. 对标RTX 3060,英特尔独显或将迎来第一波主流游戏玩家
  14. sqlrelay mysql_sql relay 使用
  15. Killer Names( 容斥定理,快速幂 )
  16. 计算机的诞生以及四个发展阶段,计算机发展历史的四个阶段
  17. xRM 扩展性及产品组合
  18. hive 计算个人的累计金额占比
  19. 测试分析与测试用例设计方法
  20. Android 屏幕适配全攻略

热门文章

  1. 在python将字符串中的空格转换为下划线_如何将下划线替换为空格,反之亦然?...
  2. VB个性签名——在图片上写字
  3. MMDetection(四):在自己的数据集上训练模型
  4. r 语言ylim = c(0 1),小白R语言数据可视化进阶练习一
  5. vnc移植_【安富莱】开源原创高级玩法,用F429接SDRAM虚拟远程VNC桌面
  6. 上班摸鱼看小说的最佳软件
  7. 新版导航条stacknavigator
  8. Java数据结构之基于ArrayList编写大众麻将和扑克牌洗牌小练习
  9. 黑羽压测 做 API接口功能测试
  10. java-jar启动jar包