- 浏览: 1756950 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:173664
-
Android学习笔记
浏览量:368131
-
iBatis开发详解
浏览量:189265
-
Objective-C学习...
浏览量:99838
最新评论
-
iLidy:
引用[/c
Hibernate持久化对象的生命周期详解 -
fengzigogo:
您好,有这个项目架构的源码下载地址吗?
一种Java Web应用开发框架的构建(基于Struts2+Spring+FreeMarker)之一 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
用Maven构建Java Web开发环境(Jetty容器)之二 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring 3之MVC & Security简单整合开发(二) -
赵庆辉:
看帖回复是美德,楼主讲的很清晰明了,看了豁然开朗.
Java String对象的经典问题(new String())
接上文
之前我们看到的第一个应用程序都是系统为我们自动创建的,那么现在来看看如何对这个程序进行一些简单的扩充。
从之前的说明中可以看到,Activity程序完成界面的显示,那么就一定会使用到布局文件,也就是说Activity程序和布局相关的配置联系非常紧密。
我们可以在Activity中通过R.java来获取组件,也可以在Activity中动态生成组件。如果要获取组件,那么就需要为组件配置ID,下面我们对main.xml进行简单的扩充,添加几个组件。
我们仍然使用线性布局管理器,schema声明不做说明,layout_width就是布局宽度,这里的fill_parent表示填充整个屏幕,也就是屏幕宽度。同理,layout_height表示布局高度,这里也就是屏幕高度。orientation表示组件的排列形式,也就是水平和竖直排列,这里使用的竖直纵向排列。
在该布局管理器中,添加了三个组件,两个TextView和一个Button,首先我们需要为每个组件添加ID,这样便于在程序中进行控制,要注意的是ID的命名格式,必须是@+id/开头,斜杠后面跟上这个组件的ID值即可。每个组件都有layout_width,这里使用wrap_content意思是组件的包裹长度,也就是不会充满屏幕宽度。同理layout_height使用了包裹组件的高度,也不会充满整个屏幕。
这里我们加了几个字符串值,strings.xml修改如下:
这里要多说一点的就是对'进行转义输出,需要加反斜线。之后运行程序,在模拟器中我们可以看到:
我们就看到了三个组件的实际运行效果,如果想看横屏显示效果时,在模拟器中可以同时按下Ctrl和F11键即可,显示效果如下:
再次按下Ctrl和F11即可切回竖屏,可能某些模拟器中从横屏切回竖屏时显示效果回不来,比如:
此时,按下Esc退出到应用程序列表,选择我们的程序,重新进入即可:
下面,我们将Button的layout_height调整为fill_parent,来看看会得到怎样的效果:
那么,也就是说,使用了fill_parent,组件会自动填充整个屏幕,也就是将屏幕下方剩余的区域全部填充满。
有了这些认识之后,我们回到R.java中来看看程序为我们自动生成了哪些资源:
可以看到,我们添加的string资源都已经反映到了R.java的静态类string中,可以通过R.string.hello等即可调用我们设置的字符串资源。而三个组件的ID,也反映到了静态类id中。那么,我们就可以通过Activity程序对它们进行控制了。修改Activity程序如下:
生命周期方法和设置布局管理器,就不多说了,这里强调的就是必须先设置一下布局管理器,之后我们才能获得其中配置的组件,如果setContentView()放在了最后一行,那么获取组件的操作都会失败。
我们使用父类Activity的findViewById()方法可以获取到我们以后的组件,该方法的返回值是View类型,也就是所有视图组件的父类,比如这里通过R.id.text1获取第一个TextView组件,那么进行强制类型转换即可拿到。
我们对text1进行了显示文字的设置,这里我们设置为“你好”,就会覆盖掉之前的“Hello World, HelloAndroidActivity!”。之后我们再获取Button组件,原理同上,拿到后我们也修改显示文字,不过这里不是直接使用字符串赋值,而是通过R.string.btn_text_zh的方式进行,也就是通过R.java去配置文件中找到替换的文本,那么我们在strings.xml里再加一行:
下面来运行程序,我们可以看到如下效果:
现在我们实现了在Activity程序中对已有的布局管理器中的组件进行修改。那么使用Activity程序来生成组件也是可以的,也就是说,我们不在布局管理器文件中进行组件的设置,而是通过编写Java代码来完成。我们不使用main.xml了,之后修改Activity程序:
结合上面的注释,我们来看一下这段程序,首先我们手动创建了线性布局管理器LinearLayout,所有配置在XML文件中的布局管理器和组件,我们都可以通过代码的形式进行编写。LinearLayout的构造方法接收一个Context类型的参数,这里我们传入的是this,说明我们的Activity类就是Context的子类,看一下类关系图:
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
从图中我们看到android.app.Activity类是android.context.Context类的子类,而我们自定义的HelloAndroidActivity类又是Activity类的子类,那么我们就可以将this传入LinearLayout的构造方法进行LinearLayout对象的构建。创建好layout之后,我们设置一下组件的排列方式,这和写XML的配置是相同的。
下面创建了两个TextView组件,因为TextView的构造方法也接受的是Context,那么我们仍然使用this即可,这样我们就构造出了连个TextView组件。然后我们调用Context类的getString()方法进行显示文字的设置,传入的参数仍然是R.java中的id,和直接传入id的效果是一样的,这里只是介绍一下getString()方法。
最后创建了一个Button组件,参考Button的构造方法,也不难理解this的传入,之后进行显示文本的设置就行了。
最后我们将创建好的三个组件添加到布局管理器中,就是使用了三次addView()方法,之后我们设置Activity使用的布局管理器,也就是调用setContentView()方法将layout传入,之后就可以运行程序进行测试了。这和我们之前看到的效果是一致的。
使用Java代码动态生成组件完全可以替代XML配置文件,但现在还没有进行其它属性的设置,代码量就已经非常大了,而且写法都是一致的,没有任何技术含量。所以使用XML文件进行视图组件的配置,可以有效的分离显示逻辑,而程序进行控制逻辑,符合MVC设计模式。
程序下载请见附件
接下文
之前我们看到的第一个应用程序都是系统为我们自动创建的,那么现在来看看如何对这个程序进行一些简单的扩充。
从之前的说明中可以看到,Activity程序完成界面的显示,那么就一定会使用到布局文件,也就是说Activity程序和布局相关的配置联系非常紧密。
我们可以在Activity中通过R.java来获取组件,也可以在Activity中动态生成组件。如果要获取组件,那么就需要为组件配置ID,下面我们对main.xml进行简单的扩充,添加几个组件。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/powered_by" /> <Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btn_text" /> </LinearLayout>
我们仍然使用线性布局管理器,schema声明不做说明,layout_width就是布局宽度,这里的fill_parent表示填充整个屏幕,也就是屏幕宽度。同理,layout_height表示布局高度,这里也就是屏幕高度。orientation表示组件的排列形式,也就是水平和竖直排列,这里使用的竖直纵向排列。
在该布局管理器中,添加了三个组件,两个TextView和一个Button,首先我们需要为每个组件添加ID,这样便于在程序中进行控制,要注意的是ID的命名格式,必须是@+id/开头,斜杠后面跟上这个组件的ID值即可。每个组件都有layout_width,这里使用wrap_content意思是组件的包裹长度,也就是不会充满屏幕宽度。同理layout_height使用了包裹组件的高度,也不会充满整个屏幕。
这里我们加了几个字符串值,strings.xml修改如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, HelloAndroidActivity!</string> <string name="app_name">HelloAndroid</string> <string name="powered_by">Powered By Nan Lei</string> <string name="btn_text">I\'m Button</string> </resources>
这里要多说一点的就是对'进行转义输出,需要加反斜线。之后运行程序,在模拟器中我们可以看到:
我们就看到了三个组件的实际运行效果,如果想看横屏显示效果时,在模拟器中可以同时按下Ctrl和F11键即可,显示效果如下:
再次按下Ctrl和F11即可切回竖屏,可能某些模拟器中从横屏切回竖屏时显示效果回不来,比如:
此时,按下Esc退出到应用程序列表,选择我们的程序,重新进入即可:
下面,我们将Button的layout_height调整为fill_parent,来看看会得到怎样的效果:
那么,也就是说,使用了fill_parent,组件会自动填充整个屏幕,也就是将屏幕下方剩余的区域全部填充满。
有了这些认识之后,我们回到R.java中来看看程序为我们自动生成了哪些资源:
package org.ourpioneer; public final class R { public static final class attr { } public static final class drawable { public static final int ic_launcher=0x7f020000; } public static final class id { public static final int btn=0x7f050002; public static final int text1=0x7f050000; public static final int text2=0x7f050001; } 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 btn_text=0x7f040003; public static final int hello=0x7f040000; public static final int powered_by=0x7f040002; } }
可以看到,我们添加的string资源都已经反映到了R.java的静态类string中,可以通过R.string.hello等即可调用我们设置的字符串资源。而三个组件的ID,也反映到了静态类id中。那么,我们就可以通过Activity程序对它们进行控制了。修改Activity程序如下:
package org.ourpioneer; import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; public class HelloAndroidActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// Android生命周期方法 super.setContentView(R.layout.main);// 设置使用的布局管理器 TextView text1 = (TextView) super.findViewById(R.id.text1);//取得text1组件 text1.setText("你好");//设置text1的显示文字 Button btn=(Button)super.findViewById(R.id.btn);//取得btn组件 btn.setText(R.string.btn_text_zh);//设置btn的显示文字 } }
生命周期方法和设置布局管理器,就不多说了,这里强调的就是必须先设置一下布局管理器,之后我们才能获得其中配置的组件,如果setContentView()放在了最后一行,那么获取组件的操作都会失败。
我们使用父类Activity的findViewById()方法可以获取到我们以后的组件,该方法的返回值是View类型,也就是所有视图组件的父类,比如这里通过R.id.text1获取第一个TextView组件,那么进行强制类型转换即可拿到。
我们对text1进行了显示文字的设置,这里我们设置为“你好”,就会覆盖掉之前的“Hello World, HelloAndroidActivity!”。之后我们再获取Button组件,原理同上,拿到后我们也修改显示文字,不过这里不是直接使用字符串赋值,而是通过R.string.btn_text_zh的方式进行,也就是通过R.java去配置文件中找到替换的文本,那么我们在strings.xml里再加一行:
<string name="btn_text_zh">我是按钮</string>
下面来运行程序,我们可以看到如下效果:
现在我们实现了在Activity程序中对已有的布局管理器中的组件进行修改。那么使用Activity程序来生成组件也是可以的,也就是说,我们不在布局管理器文件中进行组件的设置,而是通过编写Java代码来完成。我们不使用main.xml了,之后修改Activity程序:
package org.ourpioneer; import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class HelloAndroidActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// Android生命周期方法 LinearLayout layout = new LinearLayout(this);// 创建布局管理器 layout.setOrientation(LinearLayout.VERTICAL); // 设置组件排列方式 TextView text1 = new TextView(this);// 创建TextView组件 text1.setText(super.getString(R.string.hello));// 设置text1的显示文本 TextView text2 = new TextView(this); // 创建TextView组件 text2.setText(super.getString(R.string.powered_by));// 设置text2的显示文本 Button btn = new Button(this);//创建Button组件 btn.setText(super.getString(R.string.btn_text));// 设置btn的显示文本 layout.addView(text1);// 将text1添加到布局管理器中 layout.addView(text2);// 将text2添加到布局管理器中 layout.addView(btn);// 将btn添加到布局管理器中 super.setContentView(layout); // 设置布局管理器layout } }
结合上面的注释,我们来看一下这段程序,首先我们手动创建了线性布局管理器LinearLayout,所有配置在XML文件中的布局管理器和组件,我们都可以通过代码的形式进行编写。LinearLayout的构造方法接收一个Context类型的参数,这里我们传入的是this,说明我们的Activity类就是Context的子类,看一下类关系图:
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
从图中我们看到android.app.Activity类是android.context.Context类的子类,而我们自定义的HelloAndroidActivity类又是Activity类的子类,那么我们就可以将this传入LinearLayout的构造方法进行LinearLayout对象的构建。创建好layout之后,我们设置一下组件的排列方式,这和写XML的配置是相同的。
下面创建了两个TextView组件,因为TextView的构造方法也接受的是Context,那么我们仍然使用this即可,这样我们就构造出了连个TextView组件。然后我们调用Context类的getString()方法进行显示文字的设置,传入的参数仍然是R.java中的id,和直接传入id的效果是一样的,这里只是介绍一下getString()方法。
最后创建了一个Button组件,参考Button的构造方法,也不难理解this的传入,之后进行显示文本的设置就行了。
最后我们将创建好的三个组件添加到布局管理器中,就是使用了三次addView()方法,之后我们设置Activity使用的布局管理器,也就是调用setContentView()方法将layout传入,之后就可以运行程序进行测试了。这和我们之前看到的效果是一致的。
使用Java代码动态生成组件完全可以替代XML配置文件,但现在还没有进行其它属性的设置,代码量就已经非常大了,而且写法都是一致的,没有任何技术含量。所以使用XML文件进行视图组件的配置,可以有效的分离显示逻辑,而程序进行控制逻辑,符合MVC设计模式。
程序下载请见附件
接下文
- HelloAndroid.rar (141 KB)
- 下载次数: 109
评论
7 楼
dxp09104106
2014-01-24
适合入门。感谢楼主!
6 楼
chen930724
2013-12-31
很好 很详细 谢谢
5 楼
qianguming
2013-09-29
紧紧跟随3
4 楼
xiaozi0lei
2013-08-27
讲的非常好,细致,很棒,楼主加油
3 楼
mintyzz
2013-07-07
讲得很清楚,谢谢!
2 楼
tesia
2013-03-29
很详细,很好。O(∩_∩)O~
1 楼
sea0108
2013-01-23
发表评论
-
Objective-C学习笔记12:高级数据类型一
2013-03-03 21:52 5067接上文 之前介绍过变量和数据类型,那么我们来看 ... -
Objective-C学习笔记11:多态和动态类型
2013-03-03 11:20 8907接上文 多态是一个典型的面向对象概念。Obje ... -
Objective-C学习笔记十:继承二
2013-03-02 21:27 4828接上文 之前 ... -
Objective-C学习笔记九:继承一
2013-01-12 20:32 15108接上文 继承是面向对象的一个核心概念。在Obj ... -
Objective-C学习笔记八:类的定义二
2013-01-06 11:00 5371接上文 我们继续来扩展分数类Fraction, ... -
Android学习笔记17:中级视图组件DatePicker和TimePicker
2013-01-05 12:08 16238接上文 HTML5出现之前,我们在Wweb开发 ... -
Objective-C学习笔记七:类的定义一
2013-01-05 10:53 8704接上文 我们还是结合之前分数的示例来说明,只是 ... -
Objective-C学习笔记六:选择结构二
2013-01-03 20:24 5627接上文 之前介绍的都是独立的if选择结构,其实 ... -
Objective-C学习笔记五:选择结构一
2013-01-02 21:37 5747接上文 选择结构,或者称为分支结构,是编程语言 ... -
Android学习笔记16:布局管理器的嵌套
2012-12-31 12:29 9723接上文 布局管理器的嵌套就是将多种布局管理器混 ... -
Objective-C学习笔记四:循环结构
2012-12-31 11:07 8674接上文 ... -
Android学习笔记15:绝对布局管理器AbsoluteLayout
2012-12-29 12:13 11507接上文 有相对布局管理器,对应的,我们还有绝对 ... -
Objective-C学习笔记三:基本数据类型和表达式
2012-12-29 12:06 10186接上文 任何编程语言都会有数据类型,比如在Ja ... -
Objective-C学习笔记二:面向对象概述
2012-12-29 11:49 7185接上文 从字面来理解Objective-C就是 ... -
Android学习笔记14:相对布局管理器RelativeLayout
2012-12-28 13:25 14798接上文 相对 ... -
Objective-C学习笔记一:第一个应用程序
2012-12-27 12:17 14434iOS程序是基于Object ... -
Android学习笔记13:表格布局管理器TableLayout
2012-12-27 11:54 19046接上文 在Web开发中,我们会接触到形形色色的 ... -
Android学习笔记12:框架布局管理器FrameLayout
2012-10-10 10:09 19936接上文 框架布局管理器是Android布局管理 ... -
Android学习笔记11:线性布局管理器LinearLayout
2012-10-02 13:51 15846接上文 和Java GUI部分的概念类似,布局 ... -
Android学习笔记十:基本视图组件:ImageView和ImageButton
2012-09-08 14:05 21657接上文 在Web ...
相关推荐
本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中系统地介绍了Android的基本概念和开发技术。 一、Android系统架构 Android系统架构是Android开发的基础,系统架构包括Linux Kernel、...
这篇“Android学习笔记六:基本视图组件:EditText”将深入探讨`EditText`的使用、功能以及相关知识点。 首先,`EditText`继承自`TextView`,因此它具备`TextView`的所有属性,如显示文本、字体样式等。但与`...
这个例子创建了两行,第一行有两个TextView,第二行有一个跨越两列的Button。 六、TableLayout的使用场景 TableLayout适用于展示数据表、设置界面等需要行列布局的场景。例如,应用的设置界面通常会用到TableLayout...
在Android开发中,基本视图组件是构建用户界面的基础元素,它们构成了应用程序的大部分交互界面。本篇笔记将深入探讨Android中的Button组件,它是用户进行点击操作的主要元素,广泛用于触发事件或导航。 Button组件...
这篇“Android学习笔记四:基本视图组件:TextView”将深入探讨TextView的相关知识点。 首先,TextView的使用非常简单,我们可以在布局XML文件中通过`<TextView>`标签来创建一个TextView实例。例如: ```xml ...
在Android应用开发中,布局管理器是界面设计的关键部分,它们负责组织和定位应用程序中的UI元素。本篇我们将深入探讨相对布局管理器(RelativeLayout),这是一种非常灵活的布局方式,允许UI元素相对于彼此或父布局...
Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...
读书笔记:第一个springboot程序学习来源为Spring cloud微服务实战
Contiki学习笔记:启动一个进程process_start Contiki学习笔记:系统进程etimer_process Contiki学习笔记:深入理解process_run函数 Contiki 进阶学习: Contiki学习笔记:新事件产生及事件处理 Contiki学习笔记:...
这篇学习笔记将引导新手入门,通过创建第一个简单的案例来了解Android Studio的基本操作。 首先,让我们了解一下Android Studio的核心功能。它基于IntelliJ IDEA,具备代码自动补全、重构、调试等强大的开发特性。...
这篇学习笔记主要涵盖了如何在Eclipse环境下创建一个基本的Android项目以及对Android程序框架的基本理解。以下是对这些内容的详细阐述: 首先,Android程序框架的核心组件是Activity,它是应用程序与用户交互的窗口...
### Android开发学习笔记 #### Button按钮的实现与交互 在Android开发中,`Button`控件是最常用的用户界面元素之一,用于触发特定的操作或事件。本文档将详细讲解如何创建并自定义一个简单的按钮,并设置点击事件...
第1章 Android Studio环境搭建 * Android Studio简介 * Android Studio的安装 * 运行小应用Hello World * App的工程结构 * 准备开始 第2章初级控件 * 屏幕显示 * 简单布局 * 简单控件 * 图形基础 * 实战项目:...
在Android开发过程中,创建第一个应用是入门的关键步骤。在本篇Android学习笔记中,我们将探讨如何使用Eclipse IDE创建一个Android应用,以及后续的部署、调试和应用发布流程。 首先,创建Android应用需要通过...
1. **Activity**: 是Android应用程序的基本单元,它代表用户在屏幕上看到的一个界面。每个Activity都必须在`AndroidManifest.xml`文件中声明,以便系统知道如何管理和启动它们。 2. **Intent**: Intent是Android中...