程序功能:点击一个按钮,然后弹出一个提示信息

Step 1:在eclipse中新建一个android application project,在创建过程中不勾选create activity,这样就创建了一个空的android工程。

此时,src及res/layout均为空。

Step 2:在src中新建一个Activity继承自android.app.Activity,点击finish,生成代码如下:

 package cn.csc.hello_world;

 import android.app.Activity;

 public class FirstActivity extends Activity {

 }

按下shift+alt+S,弹出菜单中选择Override/Implement Methods:

勾选onCreate(Bundle),点OK,实现Activity的onCreate(Bundle)方法。自动生成代码如下:

     @Override

       protected void onCreate(Bundle savedInstanceState) {

            // TODO Auto-generated method stub

            super.onCreate(savedInstanceState);

       }

Step 3:在res/layout目录下新建一个只有一个按钮的布局文件

右击layout --》new --》 Android Xml File:

文件名为first_layout

根节点选择LinearLayout

然后点击Finish完成

first_layout.xml中自动生成代码如下:

 <?xml version="1.0" encoding="utf-8"?>

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

     android:layout_width="match_parent"     宽度:填充父节点

     android:layout_height="match_parent"    高度:填充父节点

     android:orientation="vertical" >        子节点排列方向:垂直排列

 </LinearLayout>

在LinearLayout中添加一个Button子节点,输入butt,然后alt+/,即可自动补全button子节点,要添加属性,同样可以输入几个首字母,然后alt+/补全

 <Button

         android:id="@+id/btn"    添加一个id,以后引用这个button时,可用R.id.btn

         android:layout_width="wrap_content"  包裹内容即可

         android:layout_height="wrap_content" 包裹内容即可

         android:text="I'm a button"            button上显示的文本值

         />

这里,text属性直接设置为字符串,硬编码不太好,鼠标点到”I’m a button”,使光标停留在字符串任意位置,然后按下ctrl + 1(是数字1),在弹出的菜单中,选择Extract Android String:

Replace by R.string.btnText,然后点击OK,text属性变为:android:text="@string/btnText",以后要引用这个字符串,可以用R.string.btnText。

Step 4:给刚才新建的FirstActivity设置布局文件,为first_layout.xml

在FirstActivity的onCreate()方法中,添加上:

 protected void onCreate(Bundle savedInstanceState) {

            // TODO Auto-generated method stub

            super.onCreate(savedInstanceState);

            setContentView(R.layout.first_layout);

 }

此时,会发现R.layout.点不出来first_layout,setContentView()语句报错

观察FirstActivity代码,会发现,多了一句import android.R;

把它删掉,还是报错,提示找不到R。

(注意,这里若是按下Ctrl + 1进行代码修复,import com.example.hello_world.R;

虽然不会再报错,但是,后面注册Activity时,若不指定完整的包名.类名会出现程序无法运行的问题,报错提示找不到所需的Activity。为了简单起见可以进行下面的修改package属性操作,当然,也可以不修改,后面注册各个组件时,注意带上包名即可)

找到Android Manifest.xml文件,看到根节点manifest中package属性:并不是我们设置的FirstActivity.java包名,而是创建工程时默认的那个包名,而包cn.csc.hello_world是之后才建立的。这就导致了R.java与FirstActivity.java不在同一个包中,因此无法直接访问。

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

     package="com.example.hello_world"

     android:versionCode="1"

 android:versionName="1.0" >

把package属性值修改为FirstActivity的包名即可:package="cn.csc.hello_world"。

这样R.java与FirstActivity.java就在同一个包中了,可以直接访问。

然后回到FirstActivity代码,发现就不再报错了。

Step 5 :找到添加的按钮,设置其单击响应事件

onCreate()代码修改如下:

 protected void onCreate(Bundle savedInstanceState) {

            // TODO Auto-generated method stub

            super.onCreate(savedInstanceState);

            setContentView(R.layout.first_layout);

            Button btn = (Button) findViewById(R.id.btn);

            btn.setOnClickListener(new OnClickListener() {

                      @Override

                      public void onClick(View arg0) {

               Toast.makeText(FirstActivity.this, "I was clicked", Toast.LENGTH_SHORT).show();

                      }

               });

 }

findViewById()根据Id找到需要的View

btn.setOnClickListener()设置单击事件监听,这里选择使用了匿名内部类实现。

Toast.makeText().show();弹出一个提示信息

Step 6:注册要使用的FirstActivity

完成Step 5之后,若是运行该程序,会发现没有任何效果,这是因为没有在Android Manifest.xml中注册要使用的Activity。所以FirstActivity不会被使用,当然它的onCreate()方法也不会被调用。

注册FirstActivity方法如下:

在application节点中添加activity子节点:

 <activity  android:name=".FirstActivity"      android:label="Hello world" >

             <intent-filter >

                 <action android:name="android.intent.action.MAIN"/>

                 <category android:name="android.intent.category.LAUNCHER"/>

             </intent-filter>

 </activity>

name属性必须设置,指定注册的是哪个Activity类,这里简写为.FirstActivity,将与manifest节点中的package属性拼接成完整的类名,也可以写完整的类名,如:cn.csc.hello_world.FirstActivity

label属性,设置应用的标题内容,若不设置,则标题为项目的名称。

intent-filter设置启动该activity的意图,这里将该activity设置为启动activity。

至此,改程序就可以顺利运行了。

若不想显示应用程序标题栏,则可以在onCreate()方法中,添加requestWindowFeature(Window.FEATURE_NO_TITLE);

但是,需要注意的是,一定要在setContentView()之前添加该代码,否则会报错。

总结:

若出现这不到R的错误提示,则可以优先考虑是不是前后设置的包名不一致,导致R.java与自己写的代码不在同一个包中的问题。

Manifest.xml中的package属性,是在新建工程中设置的,在手机中用于唯一标识当前应用,源代码的包可以手工建立新的包名,若与manifest.xml中的不一致,则应注意注册各个组件时,应使用完整的类限定名,即包名.类名。否则会将package属性,与所注册的组件的name属性拼接成错误的类限定名,导致找不到组件的定义类。

android菜鸟学习笔记5----第一个android程序的更多相关文章

  1. C#.NET学习笔记2---C#.第一个C#程序

    C#.NET学习笔记2---C#.第一个C#程序 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com 6.第一个C#程序:   ...

  2. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  3. android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

    补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...

  4. android菜鸟学习笔记7----android布局(二)

    3.FrameLayout:帧布局 如同Flash或者photoshop中图层的概念,在上面的图层遮盖下面的图层,没被遮到的地方仍然显示出来. 右击res/layout,然后在弹出的菜单中选择new, ...

  5. android菜鸟学习笔记26----Android广播消息及BroadcastReceiver

    1.广播类型: Android中的广播有两种类型:标准广播和有序广播.其中,标准广播是完全异步发送的广播,发出之后,几乎所有的广播接收者都会在同一时刻收到这条广播消息,因而,这种类型的广播消息是不可拦 ...

  6. android菜鸟学习笔记16----Android项目打包安装过程(Run as Android Application)

    右击项目名称,Run as Android Appication之后,Android项目打包安装过程: 1.打包生成.apk文件: 1)把源码中的.java文件编译生成.class文件 2)将所有的. ...

  7. android菜鸟学习笔记15----Android Junit测试

    Android中的Junit测试与Java Junit测试有所不同,不能简单的使用标注…… 假设写了一个MathUtils类,有两个静态方法: public class MathUtils { pub ...

  8. android菜鸟学习笔记13----Android控件(二) 自定义控件简单示例

    有时候,可能觉得系统提供的控件太丑,就会需要自定义控件来实现自己想要的效果. 以下主要参考<第一行代码> 1.自定义一个标题栏: 系统自带的标题栏很丑,且没什么大的作用,所以我们之前会在o ...

  9. android菜鸟学习笔记12----Android控件(一) 几个常用的简单控件

    主要参考<第一行代码> 1.TextView: 功能与传统的桌面应用开发中的Label控件相似,用于显示文本信息 如: <TextView android:layout_width= ...

随机推荐

  1. 2018 L2-027. 名人堂与代金券【结构体排序】

    L2-027. 名人堂与代金券 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对于在中国大学MOOC(http://www.i ...

  2. CentOS 7下安装配置FTP

    安装vsftpd yum install -y vsftpd 编辑ftp配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #anonymous_e ...

  3. jvm 简单描述

    java零基础入门-面向对象篇(一) 基础类型和引用类型 友情提示:本章开始可能会有部分较深入的内容,不说又不行,说了又很难解释清楚,因为里面的技术细节实在太多太复杂,所以我会屏蔽部分技术细节,只展示 ...

  4. 搭建 Maven ---基础入门

    这篇随笔从最基础的控制台  搭建maven讲,后面再升入的讲解IDEA搭建Maven. 一,Maven是什么?作用是什么? Maven是一个项目管理工具,它包含了一个项目对象模型 (Project O ...

  5. 怎样去主动拿一个锁并占有?synchronized关键字即可

    怎样主动去拿一个?synchronized关键字即可 怎样去释放一个锁呢?要求锁对象主动释放,打乱占有当前锁的线程即可

  6. HDU1565方格取数

    典型的状态压缩DP问题.第i行的取法只受到第i-1行的影响.首先每一行的取法要相容(不能有两个相邻),然后相邻行之间也要相容.将每一个格子看做两种状态,1表示取,0表示不取.这样每一行就是一个01串, ...

  7. svm中 C 和sigma对街宽和分隔平面的影响

    C越大 街越窄,可能引发过拟合,对于噪声的惩罚力度加大. sigma越小,高斯分布长得又高又瘦, 会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,

  8. logback MDC(Mapped Diagnostic Context)与分布式系统的跟踪系统

    logback MDC(Mapped Diagnostic Context)与分布式系统的跟踪系统 logback官方文档中第8章Mapped Diagnostic Context给我们提供了一些分布 ...

  9. GIS可视化——属性图

    一.简介 SuperMap iClient for JavaScript 提供了UTFGrid图层(属性图),用于客户端属性信息的快速交互. UTFGrid图层从UTFGrid切片数据源读取数据,其本 ...

  10. 【SQL】SQL Server中存储过程的调试方法

    1.以管理员用户登录DB服务器,把域用户追加到「Administrators」组. 2.在本机上以域用户登录,启动VS. 3.追加DB连接 4.右击要debug的存储过程,选择「ストアドプロシージャに ...