第一行代码

1.1.3 android 应用开发特点
      1. 四大组件
         Android系统四大组件分别是活动(Activity) 、服务(Service) 、广播接收器(Broadcast
Receiver)和内容提供器(Content Provider) 

      2. Eclipse
         它是 Java 开发神器,最好用的 IDE 工具之一,Eclipse 是开源的. 除了 Eclipse外, 同样适合开发 Android程序的 IDE还有 IntelliJ IDEA、 Android Studio
等。其中 Android Studio 是谷歌官方近期推出的新 IDE

      3. ADT
         ADT 全称 Android Development Tools,是谷歌提供的一个Eclipse 插件,用于在Eclipse 中提供一个强大的、高度集成的 Android 开发环境。安装了 ADT,你不仅可以联机调试,而且还能够模拟各种手机事件、分析你的程序性能等等。

2. 分析你的第一个 Android 程序
   1. src
      毫无疑问,src 目录是放置我们所有 Java 代码的地方,它在这里的含义和普通 Java
项目下的 src 目录是完全一样的,展开之后你将看到我们刚才创建的 HelloWorldActivity
文件就在里面。
   2. gen
      这个目录里的内容都是自动生成的,主要有一个 R.java 文件,你在项目中添加的任
何资源都会在其中生成一个相应的资源 id。这个文件永远不要手动去修改它。
   3. assets
      这个目录用得不多,主要可以存放一些随程序打包的文件,在你的程序运行时可以
动态读取到这些文件的内容。另外,如果你的程序中使用到了 WebView 加载本地网页
的功能,所有网页相关的文件也都存放在这个目录下。
   4. bin
      这个目录你也不需要过多关注,它主要包含了一些在编译时自动产生的文件。其中
会有一个你当前项目编译好的安装包,展开 bin 目录你会看到 HelloWorld.apk,把这个
文件拷到手机上就可以直接安装了。
   5. libs
      如果你的项目中使用到了第三方 Jar 包,就需要把这些 Jar 包都放在 libs 目录下,放
在这个目录下的 Jar 包都会被自动添加到构建路径里去。 你可以展开上图中 Android 4.0、Android Private Libraries、Android Dependencies 这些库,其中显示的 Jar 包都是已经被
添加到构建路径里的。
   6. res
      这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布
局、字符串等资源都要存放在这个目录下,前面提到的 R.java 中的内容也是根据这个目
录下的文件自动生成的。 当然这个目录下还有很多的子目录, 图片放在 drawable 目录下,
布局放在 layout 目录下,字符串放在 values 目录下,所以你不用担心会把整个 res 目录
弄得乱糟糟的。
   7. AndroidManifest.xml
      这是你整个 Android 项目的配置文件,你在程序中定义的所有四大组件都需要在这
个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新指定你
创建项目时指定的程序最低兼容版本和目标版本。由于这个文件以后会经常用到,我们
用到的时候再做详细说明。
   8. project.properties
      这个文件非常地简单,就是通过一行代码指定了编译程序时所使用的 SDK 版本。


3.AndroidManifest.xml 文件,从中可以找到如下代码:
<activity
    android:name="com.test.helloworld.HelloWorldActivity"    //layout的文件名名+包
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />      //隐式启动的条件
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
这段代码表示对 HelloWorldActivity 这个活动进行注册,四大组件都要在此注册。


4. 隐藏标题栏
   requestWindowFeature(Window.FEATURE_NO_TITLE);    //一定要在 setContentView()之前执行
   setContentView(R.layout.first_layout);            //启动软件的第一个界面

5. 在活动中使用 Toast (吐丝)
   Toast.makeText(FirstActivity.this, "你好!,1000).show();

6. 在活动中使用 Menu
   1. 首先在 res 目录下新建一个 menu 文件夹,右击 res 目录→New→Folder,输入文件夹名
menu,点击 Finish。接着在这个文件夹下再新建一个名叫 main 的菜单文件,右击 menu 文件
夹→New→Android XML Fil
   2. 然后在 main.xml 中添加如下代码:
      <menu xmlns:android="http://schemas.android.com/apk/res/android" >
          <item
                android:id="@+id/add_item"
                android:title="Add"/>
          <item
                android:id="@+id/remove_item"
                android:title="Remove"/>
      </menu>
      3. 然后打开 FirstActivity,重写 onCreateOptionsMenu()方法,代码如下所示:
         public boolean onCreateOptionsMenu(Menu menu) {
             getMenuInflater().inflate(R.menu.main, menu);
             return true;
         }

7. 销毁一个活动
   1. 按一下 Back (返回键)就可以销毁当前的活动了或 Activity 类提供了一
个 finish()方法
   2. 在按键监听里面执行finish()
      修改按钮监听器中的代码,如下所示:
      button1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                finish();
            }
       });

8. 使用显式 Intent ( 布局)
   1. 在按键监听里面执行
      button1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
            }
       });

8. 使用隐式 Intent ( 布局)
   1. 在按键监听里面执行
      button1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent("com.example.activitytest.ACTION_START");  // action的条件
                intent.addCategory("com.example.activitytest.MY_CATEGORY");           //category的条件
                startActivity(intent);
            }
       });
    2. 用隐式启动调用系统浏览器打开网页
       button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
       });
       解析:这里我们首先指定了 Intent 的 action 是 Intent.ACTION_VIEW, 这是一个 Android 系统内
置的动作,其常量值为 android.intent.action.VIEW。然后通过 Uri.parse()方法,将一个网址字
符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去。

    3. 用隐式启动调用系统拨打电话
       button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }
       });

9. 我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。<data>标签中主要可以配置以下内容。
   1. android:scheme
      用于指定数据的协议部分,如上例中的 http 部分。
   2. android:host
      用于指定数据的主机名部分,如上例中的 www.baidu.com 部分。
   3. android:port
      用于指定数据的端口部分,一般紧随在主机名之后。
   4. android:path
      用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
   5. android:mimeType
      用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
10. 向下一个活动传递数据
    1. Intent 中提供了一系列 putExtra()方法的重载,可以把我们想要传递的数据暂存在 Intent 中
       现在想把这个字符串传递到SecondActivity 中,在MainActivity可以这样编写:
       button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = "Hello SecondActivity";
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                intent.putExtra("extra_data", data);
                startActivity(intent);
            }
       });
     2. 现在把这个字符串接受,SecondActivity 可以这样编写:
        public class SecondActivity extends Activity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                setContentView(R.layout.second_layout);
                Intent intent = getIntent();
                String data = intent.getStringExtra("extra_data");
                Log.d("SecondActivity", data);
            }
         }
         解析: 如果传递的是整型数据,则使用getIntExtra()方法,传递的是布尔型数据,则使用 getBooleanExtra()方法,以此类推。

11. 返回数据给上一个活动
    1. startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是请求
码,用于在之后的回调中判断数据的来源。修改 FirstActivity 中按钮的点击事件,代码如下所示:
       button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivityForResult(intent, 1);
            }
       });
       1.1 通过按钮点击返回值
       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
                Log.d("FirstActivity", returnedData);
                }
                break;
            default:
            }
        }
        解释: onActivityResult()方法带有三个参数,第一个参数 requestCode,即我们在启动活动时传
入的请求码。 第二个参数 resultCode, 即我们在返回数据时传入的处理结果。 第三个参数 data,
即携带着返回数据的 Intent。

        1.2 通过bash通过按Back 键回到 FirstActivity
            我们可以通过重写 onBackPressed()方法来解决这个问题,代码如下所示:
                @Override
                public void onBackPressed() {
                    Intent intent = new Intent();
                    intent.putExtra("data_return", "Hello FirstActivity");
                    setResult(RESULT_OK, intent);
                    finish();
                 }


     2. 接下来我们在 SecondActivity 中给按钮注册点击事件
        public class SecondActivity extends Activity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                setContentView(R.layout.second_layout);
                Button button2 = (Button) findViewById(R.id.button_2);
                button2.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent();
                        intent.putExtra("data_return", "Hello FirstActivity");
                        setResult(RESULT_OK, intent);
                        finish();
                    }
                });
             }
          }
          解释: setResult()方法接收两个参数 ,第 一个 参数 用于 向上一 个活 动返 回处 理结果 ,一 般只 使用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用
了 finish()方法来销毁当前活动。


12. 活动的生存期
    Activity 类中定义了七个回调方法,覆盖了活动生命周期的每一个环节,下面我来一一
介绍下这七个方法。
    1. onCreate()
       这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动
第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布
局、绑定事件等。
    2. onStart()
       这个方法在活动由不可见变为可见的时候调用。
    3. onResume()
       这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的
栈顶,并且处于运行状态。
    4. onPause()
       这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方
法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度
一定要快,不然会影响到新的栈顶活动的使用。
    5. onStop()
       这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如
果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()
方法并不会执行。
    6. onDestroy()
       这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
    7. onRestart()
       这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

13. 使activity成为一个对话框主题
    在 AndroidManifest.xml 的<activity>标签中添加如下代码:
    <activity android:name=".NormalActivity" >
        </activity>
            <activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog" >
        </activity>
     解释: 使用了一个 android:theme 属性,这是用于给当前活动指定主题的

UI
13. TextView
    <TextView
        android:id="@+id/text_view"  //给当前控件定义了一个唯一标识符
        android:layout_width="match_parent"  //指定了
控件的宽度
        android:layout_height="wrap_content"  //指定了控件的高度
        android:text="This is TextView"    //文本的内容
        android:gravity="center"  //指定文字的对齐方式,可选值有 top、bottom、left、right、center等,可 以用"|"来同时指定多个值 
        android:textSize="24sp"  //指定字体的大小
        android:textColor="#00ff00"  //指定字体的颜色
        />

2. Button
   <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    1. 单监听法
       button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    // 在此处添加逻辑
            }
        });
     2. 多监听法(类的方法)
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(this);
        }
            @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button:
                break;
            default:
                break;
            }
        }

3. EditText 
   是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理
   <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Type something here"    //提示性的文字,输入了任何内容,提示消失。
        android:maxLines="2"    //指定了最大行数为两行,输入超过两行,文本向上滚动,EditText不会拉伸
        />
    1. String inputText = editText.getText().toString();  //获取当前文本输入的字符串

3. ImageView
   是用于在界面上展示图片的一个控件
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"   //指定的图片
        />
    1. 在程序中通过代码动态地更改 ImageView 中的图片
       imageView.setImageResource(R.drawable.jelly_bean);

2. ProgressBar 
   1. ProgressBar 用于在界面上显示一个进度条
      <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
   2. 让ProgressBar 消失,可以通过 android:visibility进行指定,可选值有三种,visible、invisible 和 gone。visible 表示控件是可见的,这个值是默认值。。 gone 则表示控件不仅不可见,而且不再占用任何屏幕空间。我们还可以通过代码来设置控件的可见性,使用的是setVisibility()方法,View.VISIBLE、View.INVISIBLE 和 View.GONE 三种值。

    2. 如果button 点击后就消失
       case R.id.button:
            if (progressBar.getVisibility() == View.GONE) {  //如果不显示就显示
                progressBar.setVisibility(View.VISIBLE);   
            } else {
                progressBar.setVisibility(View.GONE);   //如果显示就不显示
            }
            break;
       解释 :在按钮的点击事件中,我们通过 getVisibility()方法来判断 ProgressBar 是否可见,如果
可见就将 ProgressBar 隐藏掉,如果不可见就将 ProgressBar 显示出来
    3.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值