Android四大控件之Activity详解:实践篇

Hi,众猿们,今天给大家讲讲在安卓开发中如何使用Activity吧,主要有以下几个问题:

先谈谈Activity的创建和使用,首先,我们在项目的res/layout文件夹下创建一个xml布局文件(暂且命名为main.xml吧,众猿们要记住布局文件这个词),并在其中添加一个按钮控件,其内容如下:



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/btnButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
LinearLayout>

接下来,我们新建一个Activity(命名为MainActivity,其继承自android.content包下的Activity类),其代码为:

public class MainActivity extends Activity {
    Button btnButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        btnButton = (Button) findViewById(R.id.btnButton);
        btnButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "按钮被点击", Toast.LENGTH_LONG).show();
            }
        });
    }
}

最后,就是在Android清单文件中注册我们自定义的Activity了,我们直接在application标签下添加如下标签即可:

<activity 
   android:name="lmz.activityexample.atys.MainActivity"/>

好了,一个Activity就创建完毕了(众猿们是不是觉得本猿猿说得很繁琐,其实本猿猿也是这样觉得的)。

接下来,就是怎么取消activity上面的标题栏了(titlebar),
我们可以在自定义activity中添加代码:

 requestWindowFeature(Window.FEATURE_NO_TITLE);

也可以在清单文件中为activity添加属性:

android:theme="@android:style/Theme.Black.NoTitleBar"

如果我们在清单文件的application标签中添加属性:

android:theme="@android:style/Theme.Black.NoTitleBar"

则应用中所有的activity都不会有标题栏。

接下来是activity全屏的方法:
在activity中添加代码:


   requestWindowFeature(Window.FEATURE_NO_TITLE);
   getWindow().setFlags(
   WindowManager.LayoutParams.FLAG_FULLSCREEN, 
   WindowManager.LayoutParams.FLAG_FULLSCREEN);  

在清单文件中为activity添加属性:

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

接下来介绍清单文件中activity的其它属性:

  • android:launchMode:配置activity的启动模式(四种)
  • android:screenOrientation:设置activity的方向,这个界面就不会随着屏幕旋转了,其主要有两个值:landscape(横屏)和portrait(竖屏)
  • android:configChanges:设置手机状态改变时(如横竖屏切换)时activity是否接受该变化,当这些变化发生时,如果activity不接受的话,那么系统就会接受到这些变化而去重启activity,我们一般将该值设为(API 18以上):orientation|screenSize,这样当屏幕旋转时activity会接受该变化,从而不会被系统重启,这是activity的onConfigurationChanged方法会被调用。

接下来是退出应用的方法:在退出应用时,我们要销毁掉所有的activity,我们先来定义一个基类activity:


public class ActivityList {
    private static List mAtyList = new ArrayList();
    public static void add(Activity activity){
        mAtyList.add(activity);
    }
    public static void remove(Activity activity){
        mAtyList.remove(activity);
    }
    public static void quitApp(){
        for(Activity activity : mAtyList){
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }
}   

在定义一个基类的activity:

public class BaseActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityList.add(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityList.remove(this);
    }
}

这样当我们通过ActivityList类名调用quitApp方法时,就可以完全退出应用了。
接下来,我们聊聊Intent(意图)对象,当我们需要从一个activity跳转到另一个activity(即从一个界面跳转到另一个界面)时,就需要使用意图对象,意图分为两种,一种是显式的,没什么可讲,一种是隐式的,可以用来启动其它应用的activity。在接触隐式意图前,我们先了解一下意图过滤器,意图过滤器由action、category和data三个属性组成,意图过滤器至少要有一个action值,可以有多个category值,一般要配置在清单文件的activity标签下。当我们需要使用隐式意图启动activity时,一般需要也需要为意图配置action和category值,这样系统会自动分析该意图并启动具有相同意图过滤器的activity(优先匹配action值)。
当应用被启动时,系统也是根据activity的意图过滤器来决定首先启动那个应用时,该意图过滤器的值为:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
intent-filter>

在用意图启动activity时,我们还可以利用意图来传递数据,像传递整数、字符串等数值时,可以直接放在intent对象类,也可以利用Bunlde对象,当需要传递一个类时,需要该类实现了Serializable序列化接口。
在意图过滤器中,还有一个属性:data,该属性指定了启动该activity时需要的数据,只有当意图中携带的数据与启动启动activity时需要的数据一致时,该activity才会被启动,其由五部分组成:

  • android:schmem
  • android:host
  • android:port
  • android:path
  • android:mimeType

如:用隐式意图来启动系统浏览器访问指定网址:

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

此外,启动activity并接受返回结果主要涉及到三个方法:

  • startActivityForResult
  • setResult
  • onActivityResult

    最后还是每日一乐吧:

从前有个全国管理系统,是孙中山做的设计,老蒋做的实现,结果老毛写了个病毒,趁着日本黑客对系统做攻击的当口,拿到了管理员权限,把原来那批程序员给隔离了。老邓接手以后,重构代码,出了个2.0版,为了开发速度,遗留了一堆BUG没处理。人们纷纷质疑:是不是核心构架太单一,双核会不会好点?

你可能感兴趣的:(个人,android,android)