zoukankan      html  css  js  c++  java
  • Android学习路径——Android的四个组成部分activity(一)

    一、什么是Activity?

    Activity简单的说就是一个接口。我们是Android手机上看到的每个界面就是一个activity。



    二、Activity的创建

    1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注冊activity。这个activity就创建成功了。

    public class MyActivity extends Activity {
    
    }


    2.清单文件注冊activity
    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.study.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            
            <activity android:name="com.yang.study.MyActivity" >
            </activity>
        </application>
    当中MainActivity就是程序启动的activity,这点能够从intent-filter的action能够看出

    我们自定义的activity就是以下的MyActivity

     <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    特别说明的一点:每个应用程序事实上能够在launcher也就是android手机的启动器中创建多个图标,仅仅须要在activity中配置上面这个intent-filter就可以,当然一般没人这么干。多个应用图标easy引起用户的困扰。


    三、Activity的启动

    既然应用程序仅仅有一个启动的入口,那么其它activity怎样启动呢?

    activity的启动也有两种方式,第一种是显示启动,另外一种是隐式启动


    a.activity的显示启动

    显示启动就是在创建意图(intent)的时候指定要启动的类

    1.创建意图

    2.startActivity(intent)

    能够用setclass方法指定类

    Intent intent = new Intent();
    intent.setClass(MainActivity.this, MyActivity.class);
    startActivity(intent);
    或setclassname 指定类名

    Intent intent = new Intent();
    intent.setClassName(MainActivity.this, "com.yang.study.MyActivity");
    startActivity(intent);
    也能够直接构造intent的时候指定类

    Intent intent = new Intent(MainActivity.this, MyActivity.class);
    startActivity(intent);
    这三种形式都能够显示启动activity


    tips:假设想在一个应用程序中启动其它应用程序的activity,能够做得到吗?

    答案是能够的。仅仅要被启动的activity在清单文件的配置中的export属性设置为true。那么在其它应用程序中就能够启动它,方法例如以下:

    Intent intent = new Intent();
    intent.setClassName("com.yang.demo", "com.yang.demo.MainActivity");
    startActivity(intent);
    setClassName方法第一个參数是要启动的应用程序的包名。第二个參数是要启动的类名


    b.activity的隐式启动

    隐式意图就是在启动的时候不指定要启动的类。而是通过动作action和数据data的匹配来启动activity

    eg.隐式启动打电话界面

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel://18888009988"));
    startActivity(intent);
    隐式启动浏览器:

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));
    <span style="font-family: Arial, Helvetica, sans-serif;">startActivity(intent);</span>
    上面的两个样例都是启动系统自带的一些界面,关于系统默认界面,还有非常多。能够去參考网上的资料,因为篇幅所限,这里就不一一列举了。


    假设我们的activity是一个浏览器工具。当我们使用上面的隐式启动浏览器的时候,我们也希望自己的activity被启动,该怎样处理呢?

    这个时候。我们仅仅需在avtivity清单文件里设置intent-filter意图过滤器,当我们使用上面的隐式启动浏览器的方法,我们自定义的activity也将同一时候被启动。

    样例例如以下:

    <activity
                android:name="com.yang.study.MyActivity"
                android:exported="true" >
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
    
                    <data android:scheme="http" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>

    在清单文件里设置intent-filter  scheme參数限定为http 这样就能够拦截全部动作为android.intent.action.VIEW data为http开头的意图了。

    当我们通过隐式意图启动activity的时候,我们自己的activity也会被启动

    	Intent intent = new Intent();
    	intent.setAction(Intent.ACTION_VIEW);
    	intent.setData(Uri.parse("http://www.baidu.com"));
    	startActivity(intent);



    四、activity的显示

    activity是一个个用户看到的界面,那么我们怎么定义要看到的内容的,非常easy,在activity的oncreat()方法,在里面就能够设置我们要显示的内容

    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    }
    setContentView()方法设置用户要显示的界面,当中放入要显示的ayout布局文件就可以


    五、activity的关闭

    acitivty关闭直接调用activity的finish()方法就可以

    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		finish();
    	}


    这篇文章简单的介绍了下activity的启动与关闭,重点内容就是显示和隐式两种启动方式了,实际使用中出现的频率也非常高,非常有必要掌握。



















  • 相关阅读:
    C# treeView添加节点 删除节点
    xml 基础
    第一章魔兽窗口
    混合开发的框架的初步见解
    node.js的初步见解
    AngularJs的理解
    jquery属性,遍历,HTML操作
    jquery中动画效果的函数
    jquery的选择器
    js操作DOM对象及怎么获取浏览器宽高
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4560247.html
Copyright © 2011-2022 走看看