通过上一篇文章,大概了解了Android用户界面的设计方式,以及如何通过XML来设计界面。并且完成了一个非常简单的示例。
在上一篇文章中,涉及到了一些资源文件,直观点说,就是res目录下的那些目录和文件,常用的有:
  • res/drawable/ 用来存放图片文件
  • res/layout/ 用来存放布局定义文件
  • res/values/ 用来存放一些变量、参数等文件
这些资源文件都是独立于代码而存在的,那么在代码中又是如何访问到这些资源的呢?
在 Android的代码中,有一个文件比较奇怪,第一次接触到Android代码的人都应该迷惑过,这个文件就是R.java,在R.java的注释部分, 有这样一段话:“AUTO-GENERATE FILE. DO NOT MODIFY”,这个文件是自动生成的,不要修改。
  • 这个文件就是Java代码和独立于Java代码的资源文件之间的访问窗口,Java程序可以通过R.java来访问那些资源文件。
  • 这个文件是在程序编译过程中由aapt(Android Asset Packaging Tool) 自动生成
  • 这个文件中的属性都是public static final的,所以可以直接在Java代码中引用,每个属性都代表一个资源,看起来就像为每个资源都定义了一个ID,然后通过这个ID来访问资源
  • 所有的资源文件都被编译进最后生成的二进制包中,这样能够带来很高的性能和效率
按照前面的示例,那么在R.java中会存在像这样一段代码:
public final class R {
        public static final class attr {
        }
        public static final class drawable {
                public static final int icon=0x7f020000;
        }
        public static final class layout {
                public static final int main=0x7f030000;
        }
        public static final class string {
                public static final int app_name=0x7f040001;
                public static final int hello=0x7f040000;
        }
}

这里面的main就是由res/layout/main.xml生成的,其他两个常量是由res/drawable/下icon.png和res/values/strings.xml生成的。
接下来在看一下,如何在Java代码中使用这个R.java,创建一个文件Adventure.java :(开始快乐的学习旅程^_^)

package com.penguin.adventure;

import android.app.Activity;
import android.os.Bundle;

public class Adventure extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
        }
}

注意这其中的R.layout.main,通过setContextView(),被Java程序调用。
这段代码中引入了另外一个非常重要的概念:Activity,到目前为止,已经介绍的另外两个比较重要的概念是 ViewGroup和View。如果套用时髦的MVC来理解的话:ViewGroup和View属于View领域的东西,Activity可以理解为 Control领域的东西,虽然可以这么类比着来理解,但是Activity其实做了更多的事情,由它将View和一些数据、操作等结合在一起,完成一个相对完整的行为、活动。所以,任何 View要被显示,必须通过Activity来进行。这样每个Activity都会包含特定的行为,多个Activity互相合作,最终组成一个完整的 Android程序。
在示例的Activity中,有一个onCreate()方法,这个方法会在此Activity被创建的时刻调用。在方法内部,设置此 Activity的视图为R.layout.main中定义的视图,也就是res/layout/main.xml中定义的视图 (视图、布局、GUI、UI在这里已经混合使用了,并且他们意义相同,后文统一用View表示)。
Activity所包含的内容很多,会用单独的一篇文章来详细介绍。
说到此处,我们应该知道如何创建一个View,并通过Activity将其显示在屏幕上。接下来事情,就是用户如何和这个Activity交互。

转载于:https://blog.51cto.com/penguin7/221565

Android用户界面设计学习之旅-第二站相关推荐

  1. Android用户界面设计学习之旅-第三站

    通过上一篇文章,知道了如何创建一个应用程序来显示一个静态的View.然而,在大多数情况下仅仅显示是不够的,应该还需要与用户的交互行为.现在完成一个简单的和用户交互的示例. 这个小程序的需求是: 画面上 ...

  2. LINQ学习之旅——第二站LTQ之标准数据库操作(增查删改)

    今天要讲解主要内容是关于LINQ TO SQL中的标准数据库操作:插入(Insert).查询(Select).更新(Update)以及删除(Delete),凡是涉及到数据库方面的都会使用这些操作.而这 ...

  3. 基于 Android NDK 的学习之旅----- C调用Java

    2019独角兽企业重金招聘Python工程师标准>>> 基于 Android NDK 的学习之旅----- C调用Java 许多成熟的C引擎要移植到Android 平台上使用 , 一 ...

  4. 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

    原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据 ...

  5. 基于 Android NDK 的学习之旅-----Java 调用C(附源码)

    基于 Android NDK 的学习之旅-----Java 调用C 随便谈谈为什么要Java调用C 吧: 我认为: 1.  有些公司开发Android项目的时候, 许多组件功能可能是C中已经实现了,所 ...

  6. Android热修复学习之旅——HotFix完全解析

    在上一篇博客 Android热修复学习之旅开篇--热修复概述中,简单介绍了各个热修复框架的原理,本篇博客我将详细分析QQ空间热修复方案. Android dex分包原理介绍 QQ空间热修复方案基于An ...

  7. 基于 Android NDK 的学习之旅-----资源释放

    基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概 ...

  8. 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码)

    基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着上篇文章继续讲.主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输. 1.主要流程 1.  String ...

  9. Android用户界面设计

    Android用户界面设计 用户界面设计是Android应用开发的一项重要内容.在进行开发的过程中,我们需要了解UI元素如何呈现给用户,也就是如何控制UI界面.andorid提供了4种控制UI的方法. ...

最新文章

  1. java中集合的模型特点_Java 学习笔记(十四)集合
  2. 012_日期内建函数
  3. Jenkins部署:The username and password you provided are not correct (error 401)
  4. 解决报错: No candidates found for method call XXXX (方法没有调用者)
  5. python显示no matching distribution,Python使用pip安装No matching distribution found for PyYaml==5.3.1...
  6. 数字后端基本概念介绍——Placement Blockage
  7. Windows 7 语言包
  8. C语言计算星历位置,GPS广播星历计算卫星位置和速度
  9. 塑料盖行业调研报告 - 市场现状分析与发展前景预测
  10. Docker 配置容器固定IP
  11. [转帖]AMD、英特尔为何争相走向胶水多核处理器?真相在此
  12. 快速搭建多用户共享桌面云环境 云教室环境搭建
  13. android:ListView的局部刷新
  14. android.bp 编译,Android编译系统中的Android.bp
  15. 8.python输出100以内所有7的倍数
  16. 数据仓库基础3-整明白粒度
  17. 嵌入式Linux基础教程-读书笔记
  18. PLC前途如何,大学生能学吗,不要指望学会PLC就能月薪15000
  19. linux管理口连交换机灯不亮,交换机端口指示灯不亮了怎么办?
  20. 怎么使用HTML<table>标签做表格

热门文章

  1. antd option宽度自适应_网站自适应模板是什么
  2. java import路径_Java import以及Java类的搜索路径
  3. 在AWS S3的连接过程中发生java.lang.BootstrapMethodError: call site initialization exception
  4. 项目进度管理:定义活动
  5. Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
  6. MapReduce Java API实例-统计平均成绩
  7. Windows下curl的下载与使用
  8. ElementUI的DateTimePicker组件添加验证规则以及限制选择范围
  9. springboot2使用JUnit5单元测试使用大全
  10. 【编程2】单链表+单链表反转(LeetCode. 206)