zoukankan      html  css  js  c++  java
  • android菜鸟学习笔记5----第一个android程序

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

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

     

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

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

     1 package cn.csc.hello_world;
     2 
     3  
     4 
     5 import android.app.Activity;
     6 
     7  
     8 
     9 public class FirstActivity extends Activity {
    10 
    11  
    12 
    13 }

     

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

     

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

    1     @Override
    2 
    3       protected void onCreate(Bundle savedInstanceState) {
    4 
    5            // TODO Auto-generated method stub
    6 
    7            super.onCreate(savedInstanceState);
    8 
    9       }

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

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

    文件名为first_layout

    根节点选择LinearLayout

    然后点击Finish完成

     

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

     1 <?xml version="1.0" encoding="utf-8"?>
     2 
     3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     4 
     5     android:layout_width="match_parent"     宽度:填充父节点
     6 
     7     android:layout_height="match_parent"    高度:填充父节点
     8 
     9     android:orientation="vertical" >        子节点排列方向:垂直排列
    10 
    11 </LinearLayout>

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

     1 <Button
     2 
     3         android:id="@+id/btn"    添加一个id,以后引用这个button时,可用R.id.btn
     4 
     5         android:layout_width="wrap_content"  包裹内容即可
     6 
     7         android:layout_height="wrap_content" 包裹内容即可
     8 
     9         android:text="I'm a button"            button上显示的文本值
    10 
    11         />

    这里,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()方法中,添加上:

    1 protected void onCreate(Bundle savedInstanceState) {
    2 
    3            // TODO Auto-generated method stub
    4 
    5            super.onCreate(savedInstanceState);
    6 
    7            setContentView(R.layout.first_layout);
    8 
    9 }

    此时,会发现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不在同一个包中,因此无法直接访问。

    1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    2 
    3     package="com.example.hello_world"
    4 
    5     android:versionCode="1"
    6 
    7 android:versionName="1.0" >

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

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

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

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

    onCreate()代码修改如下:

     1 protected void onCreate(Bundle savedInstanceState) {
     2 
     3            // TODO Auto-generated method stub
     4 
     5            super.onCreate(savedInstanceState);
     6 
     7            setContentView(R.layout.first_layout);
     8 
     9            Button btn = (Button) findViewById(R.id.btn);
    10 
    11            btn.setOnClickListener(new OnClickListener() {
    12 
    13                      @Override
    14 
    15                      public void onClick(View arg0) {
    16 
    17               Toast.makeText(FirstActivity.this, "I was clicked", Toast.LENGTH_SHORT).show();
    18 
    19                      }
    20 
    21               });
    22 
    23 }

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

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

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

    Step 6:注册要使用的FirstActivity

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

    注册FirstActivity方法如下:

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

     1 <activity  android:name=".FirstActivity"      android:label="Hello world" >
     2 
     3             <intent-filter >
     4 
     5                 <action android:name="android.intent.action.MAIN"/>
     6 
     7                 <category android:name="android.intent.category.LAUNCHER"/>
     8 
     9             </intent-filter>
    10 
    11 </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属性拼接成错误的类限定名,导致找不到组件的定义类。

  • 相关阅读:
    java设计模式笔记(1)-适配器模式
    linux下源码编译安装mysql
    spring boot入门
    2016年终总结
    CentOS获取公网IP
    shell中的$0 $n $# $* $@ $? $$
    shell中各种括号的作用详解()、(())、[]、[[]]、{}
    10个实战及面试常用Linux Shell脚本编写
    记录centos下nl与cat -n的不同
    grep、cut、awk、sed的使用
  • 原文地址:https://www.cnblogs.com/dqrcsc/p/4603719.html
Copyright © 2011-2022 走看看