Android 4学习(7):用户界面 - 基础
参考《Professional Android 4 Development》
Android UI基本元素
下面这些概念是Android UI设计的基础,深入学习和理解它们是Android UI设计的基础:
- View:View是所有UI元素,包括Layout在内,的父类。
- View Groups:View的子类,实现了ViewManager接口。一个ViewGroup可以包含多个子View。
- Fragmengts:用于封装UI的基本元素。Fragment有自己的layout配置文件,可以接收用户输入,可以方便地适配不同的屏幕。
- Activity:用于表达android设备的屏幕,Activity类似于Web开发中的Form表单。View等UI元素只有绑到Activity中才可以被用户可见。
Android UI基础
Android UI与Activity的绑定
最常用的方法是使用setContentView()将Layout ID或View对象传到Activity中,例如:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView myTextView = new TextView(this);
setContentView(myTextView);
myTextView.setText(“Hello, Android”);
}
同样的,使用findViewById()方法可以通过View ID获取View对象:
TextView myTextView = (TextView)findViewById(R.id.myTextView);
Layout简介
Layout是ViewGroup的子类,用于描述和管理Android UI的布局。Android自带了很多Layout,常用的包括FrameLayout,LinearLayout,RelativeLayout和GridLayout。关于Layout的更多信息,可以参考这个链接:
http://developer.android.com/guide/topics/ui/declaring-layout.html#CommonLayouts
下面是一个Layout示例文件:
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<TextView
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:text=”Enter Text Below”
/>
<EditText
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:text=”Text Goes Here!”
/>
</LinearLayout>
wrap_content将View的高(或宽)设置为能包裹控件内容的最小值,而match_parent则使View尽可能地填充父容器。
Layout优化
<merge>: 由于Layout可以nest(叠加?)使用,所以有时会出现冗余的Layout。一个常见的例子是使用FrameLayout创建一个单根的配置文件,例如:
<?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”>
<ImageView
android:id=”@+id/myImageView”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:src=”@drawable/myimage”
/>
<TextView
android:id=”@+id/myTextView”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello”
android:gravity=”center_horizontal”
android:layout_gravity=”bottom”
/>
</FrameLayout>
若将上面的layout添加到另一个Layout中,则会产生冗余(redundant),更好的解决方式是使用<merge>标签:
<?xml version=”1.0” encoding=”utf-8”?>
<merge xmlns:android=”http://schemas.android.com/apk/res/android”>
<ImageView
android:id=”@+id/myImageView”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:src=”@drawable/myimage”
/>
<TextView
android:id=”@+id/myTextView”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello”
android:gravity=”center_horizontal”
android:layout_gravity=”bottom”
/>
</merge>
当使用<merge>标签的配置文件被嵌入到另一个文件中时,<merge>标签会被删掉。<merge>标签常和<include>一起使用,例如:
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<include android:id=”@+id/my_action_bar”
layout=”@layout/actionbar”/>
<include android:id=”@+id/my_image_text_layout”
layout=”@layout/image_text_layout”/>
</LinearLayout>
使用ViewStub
ViewStub是View的子类,使用类似Lazy Load的方式加载,从而节省了系统资源。在代码中使用:
// Find the stub
View stub = findViewById(R.id. download_progress_panel_stub);
// Make it visible, causing it to inflate the child layout
stub.setVisibility(View.VISIBLE);
// Find the root node of the inflated stub layout
View downloadProgressPanel = findViewById(R.id.download_progress_panel);
配置文件:
<?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”>
<ListView
android:id=”@+id/myListView”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
/>
<ViewStub
android:id=”@+id/download_progress_panel_stub”
android:layout=”@layout/progress_overlay_panel”
android:inflatedId=”@+id/download_progress_panel”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_gravity=”bottom”
/>
</FrameLayout>
Android 4学习(7):用户界面 - 基础的更多相关文章
- Android Ormlite 学习笔记1 -- 基础
Ormlite 是一个开源Java数据实体映射框架.其中依赖2个核心类库: 1.ormlite-android-4.48.jar 2.ormlite-core-4.48.jar 新建项目,引用上面2个 ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
- Android:日常学习笔记(7)———探究UI开发(4)
Android:日常学习笔记(7)———探究UI开发(4) UI概述 View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
---------------------------------------------------------------------------------------------------- ...
- Android Testing学习02 HelloTesting 项目建立与执行
Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...
- Android Testing学习01 介绍 测试测什么 测试的类型
Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Android:学习AIDL,这一篇文章就够了(下)
前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...
随机推荐
- QT QDockWidget锚接部件 和 QTreeWidget 树形部件 构成树形选择项
1. 如图,在mainwindow中 添加DockWidget到右侧,里面镶嵌TreeWidget. 2. QTreeWidget *treeWidget = new QTreeWidget; // ...
- 将Sql2008的数据库转到2005
今天碰到一个特别伤心的事情. 事情的起因是这样的,现在我负责评教系统的维护工作.由于中途服务器转迁,迁移之前数据库版本是2005,而现在的服务器版本是2008R2的.在这个过程并没有发生什么问题. 问 ...
- 搜索7--noi1804:小游戏
搜索7--noi1804:小游戏 一.心得 二.题目 1804:小游戏 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 一天早上,你起床的时候想:“我编程序这 ...
- node.js 上传图片
依赖库 connect,gm,imagemagick,image-size connect:中间件 gm,imagemagick:用来处理图片如缩放.切割.添加文字水印等 image-szie:获取图 ...
- TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议【转】
转自:http://blog.csdn.net/goodboy1881/article/details/668556 把这三个协议放到一起学习是因为这三个协议处于同一层(网际层),ARP协议用来找到目 ...
- 慕课网python分布式爬虫打造搜索引擎视频中爬取伯乐网文章
代码:https://github.com/longbigbeard/scrapy_demo
- 求一些数字字符参数的和(Java)
一.思路 输入数字(字符型)参数: 将字符型强制转化为整数型: 求和: 输出: 二.流程图 三.源程序代码及结果
- Spring_总结_04_高级配置(三)_处理歧义
一.前言 本文承接上一节:Spring_总结_04_高级配置(二)之条件注解@Conditional 我们前面装配bean时,在Spring容器中,都是只有一个bean能匹配所需的结果. 如果有多个b ...
- AOE网络——求关键路径
1.计算每个活动的最早发生时间(正序) earliest[1]=0; earlest[k]=max{earliest[j],+dut[j][k]} 2.计算每个活动的最晚发生时间(逆序) lastes ...
- Engineer manager
your tasks and responsibilities Position: Major Tasks Lead site project management to ensure all p ...