Android Studio开发-day2 Activity的使用

Activity的使用

Activity是Android程序的四大组件之一,也是呈现给用户的第一印象,因此对于这个组件的编程是非常重要的。

创建Activity

创建Activity非常简单,在AS中,切换到Project目录下,寻找包文件夹,在其上右击,新建一个空的activity,AS会默认帮我们在Manifest中进行注册,并且程序会自动重写Oncreate方法

菜单选项的使用

要想在Activity中添加菜单栏,实现如下的效果:

image.png

首先需要在res目录下新建menu文件夹,在menu文件夹中新建一个menu类型资源文件,文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<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>

此时已经可以使用AS的预览功能查看到菜单栏了,但是仍然需要在Activity中激活一下,在activity.java中重写
public boolean onCreateOptionsMenu(Menu menu){};函数,这里可以使用AS快捷键Ctrl+O,搜索此函数

重写完以上函数后,两个菜单项并不能实现其功能,需要再重写一下public boolean onOptionsItemSelected(MenuItem item) {}

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){

            case R.id.add_item:
                Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
                break;



        }
        return true;
    }

Toast的使用

Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。

toast的使用非常简单,只需要使用静态方法makeText()即可实现

Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
// toast.setGravity(Gravity.CENTER, 0, 0); 实例方法,设置出现位置
/*
   toast.setGravity(Gravity.CENTER, 0, 0);
   LinearLayout toastView = (LinearLayout) toast.getView();
   ImageView imageCodeProject = new ImageView(getApplicationContext());
   imageCodeProject.setImageResource(R.drawable.icon);
   toastView.addView(imageCodeProject, 0);
*/
// 设置带图片的toast

效果图:


Toast效果图
Toast效果图

Activity切换

最简单的切换方式,显式Intent,即指明打开新的Activity的名字:

Intent intent = new Intent(MainActivity.this,Main2Activity.class);// 去往的参数填一个class文件
startActivity(intent);

复杂一点的是隐式切换:


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

这里是打开系统默认的Activity,比如这里打开的就是浏览器,当然,如果别的Activity也可以在manifest中进行注册,隐式Intent打开的是符合注册条件的activity,若存在多个符合条件会提供给用户进行选择

        <activity android:name=".Main3Activity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>

Intent传递数据

使用Intent可以在Activity中传递数据,一种简单的方法是:

String data = "Hello,My activity";

Intent intent = new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("extra_data",data);
startActivityt();

// Main2Activity中接受数据的部分
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d(TAG, data);

还有一种方法是调用Main2Activity的MainActivity从被调用的获得数据:

// MainActivity中的代码
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(intent,1);

//另外要重写onActivityResult来获取返回数据,这里的requestCode就是我们刚才设置的1,这样这个函数就可以处理多个request了
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                if (resultCode==RESULT_OK){
                    String returndata = data.getStringExtra("data_back");
                    Log.d(TAG,returndata);

                }break;
            default:

        }

    }
// Main2Activity中的代码
Intent intent = new Intent();
intent.putExtra("data_back","Hello,my mainactivity");
setResult(RESULT_OK,intent);

// 也可以重写onBackPress的方法,加入上面代码

推荐阅读更多精彩内容