您的位置:首页 > 移动开发 > Android开发

【Android】《第一行代码—Android》第二章总结

2015-12-12 13:44 363 查看

隐藏Acitivity标题栏

如果觉得标题栏相当占用屏幕空间,隐藏
Activity
的标题栏只需在
MainActivity
类中的
onCreate()
方法中添加
requestWindowFeature(Window.FEATURE_NO_TITLLE)
代码即可。

再次运行Android程序,就会看到,此时标题栏已经被隐藏掉了。

在Activity中使用Toast

Toast
是Android提供的一种非常好的提醒方式,在程序中可以使用他们将一些短小的信息通知给用户。这些信息会在一段时间后自动消失,并且不会太占用屏幕空间。

首先创建一个
Button
按钮

Button button1 = (Button) findViewById(R.id.button_1);


这里通过
findViewById(R.id.button_1)
获取在布局文件中定义的
Button
元素。
findViewById()
方法返回的是一个
View
对象,我么需要把他向下转型成
Button
对象。得到按钮的实例对象后,调用
setOnClickListener()
方法为按钮注册一个监听器

button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "you clicked button 1", Toast.LENGTH_SHORT )
}
});


点击按钮时候就会执行监听器中的
onClick()
方法。因此弹出
Toast
的功能要在
onClick()
方法中编写咯。
Toast
的用法非常简单,通过静态的
makeText()
方法创建一个
Toast
对象,然后调用
show()
方法把
Toast
显示出来。这里需要注意,
makeText()
方法需要传入三个参数,第一个参数是
Context
,也就是
Toast
要求的上下文环境,第二个参数是
Toast
显示的文本内容,第三个参数是
Toast
显示的时长,有两个内置常量可供选择:
Toast.LENGTH_SHORT
Toast.LENGTH_LONG
运行就可以看到效果咯。

在Activity中使用Menu

需要在MainActivity类中重写
onCreateOptionsMenu()
方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflayer().inflater(R.menu.main, menu );
return true;
}


getMenuInflayer()
可以得到
MenuInlater
对象,在调用它的
inflater()
方法就可给当前Activity创建菜单了。
inflater()
方法接受两个参数,第一个擦拿书用于指定通过哪个资源文件来创建菜单,这里传入
R.menu.main
,第二个参数用于指定我们的菜单项将添加到哪个
Menu
对象中,这里直接用
onCreateOptionsMenu()
方法传入的参数
menu
。然后给这个方法返回
true
,表示允许创建的菜单显示出来,如果返回了
false
, 则创建的菜单将不能显示。

光创建菜单没有任何实际意义,我们还要为菜单定义响应事件,在
MainActivity
类中重写
onOptionsItemSelected()
方法,代码如下

@Override
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;
default :
}
return true;
}


onOptionsItemSelected()
方法中,调用
item.getItemId()
来判断点击的是哪个菜单项,然后给每个菜单项加入自己的处理逻辑,这里我们就弹出
Toast


销毁一个Actiivty

button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
finish();
}
});


使用Intent在Activity间穿梭

Intent
有两种构造器,第一种接收传入两个参数,分别为:启动
Intent
的上下文环境、目标活动。即为显式
Intent
。第二种接收传入一个
action
活动作为参数,这个
action
活动以字符串类型传入。即为隐式
Intent


显式使用

Intent(MainActivity.this, OtherActivity,class)


代码如下:

Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class );
startActivityForResult(intent, 1);
}
});


隐式使用

Intent("action")


代码如下

Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivityForResult(intent);
}
});


Activity最佳实践

实际开发中遇到的程序肯定不会只有几个简单的
Activity
,特别是面对那么多
Activity
,加上不是自己开发的时候,经常会纳闷当前是在哪个
Activity
,下面介绍的这个小技巧,可以帮助你快速的判断出程序当前在哪个
Activity


首先常见
BaseActivity
继承
Activity
,然后重写
onCreate()
方法,代码如下

package com.example.activitytest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class BaseActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
ActivityCollector.addActivity(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}

}


onCreate()
方法中,通过
getClass().getSimpleName()
获取了当前实例的类名,并通过
Log.d("BaseActivity", getClass().getSimpleName())
方法在日志中打印出来。接下来,让所有的
Activity
都继承
BaseActivity
,它们不再直接继承
Activity
,但是它们仍然间接继承了
Activity
中的所有特性。重新运行程序,就可以打印出当前所在
Activity
的类名。

<——————————-分割线——————————————–>

不知道你有没有发现,当你在手机浏览器中打开很多网页时,要想退出程序是不是要按很多次的返回键?有没有觉得这样很麻烦?你可能会说直接按下Home键就OK,但你可能不知道,按Home键只是把程序挂起,并没有真正退出程序。那我们该怎样实现按一下Back键就可以直接退出程序呢?

我们设想有一个专门负责
Activity
管理的
ActivityCollector
集合类,每创建一个新的
Activity
,就把它添加到
ActivityCollector
中来,每关闭一个
Activity
就把它从
ActivityCollector
中移除,要想关闭打开的所有
Activity
,就直接把
ActivityCollector
中存储的所有
Activity
全部移除,

这样设想,我们的功能是不是实现了呢?

先来创建一个
ActivityCollector
类作为
Activity
管理器,代码如下

package com.example.activitytest;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;

public class ActivityCollector {

public static List<Activity> activities = new ArrayList<Activity>();

public static void addActivity(Activity activity) {
activities.add(activity);
}

public static void removeActivity(Activity activity) {
activities.remove(activity);
}

public static void finishAll() {
for (Activity activity : activities ) {
if ( !activity.isFinishing()) {
activity.finish();
}
}
}

}


其中
addActivity(Activity activity)
方法向
ActivityCollector
中添加
Activity
removeActivity(Activity activity)
方法从
ActivityCollector
中移除
Activity
finishAll()
方法先遍历集合中存储的每一个
Activity
,得到每个
Activity
调用
activity.finish()
方法,将集合中的所有
Activity
都结束掉。

所以在创建新的
Activity
的时候,只需要重写
onCreate()
方法,在其中添加
ActivityCollector.addActivity(this)
,重写
onDestroy()
方法,添加
ActivityCollector.addActivity(this)
即可。代码如下

package com.example.activitytest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class BaseActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
ActivityCollector.addActivity(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}

}


如果想直接一键退出所有的
Activity
并结束程序,只需要修改该
Activity
界面按钮的监听器点击事件的代码即可。代码如下

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
ActivityCollector.finishAll();
}


其中
ActivityCollector.finishAll()
方法,负责关闭所有存活的
Activity


<——————————-分割线——————————————–>

还有一种情况是,当你想启动某个
Activity
时,你却并不清除启动这个
Activity
需要传递那些数据?其实换一种写法,就可以轻松帮你解决上面的问题。我们现在
actionStart(Context context, String data1, String data2 )
方法中构建一个
Intent
,需要存储的数据通过
String data1, String data2
这两个形参传递进来,然后又把他们存储到Intent,最后调用
context.startActivity(intent)
方法来启动
Activity
,一目了然。代码如下

public static void actionStart(Context context, String data1, String data2 ) {
Intent intent = new Intent(context, SecondActivity.class );
intent.putExtra("param1", data1);
intent.putExtra("param2", data2);
context.startActivity(intent);
}


然后启动
Activity
只需要一行代码,在
onClick()
点击事件中添加如下代码

Activity.actionStart(DemoActivity.this, "data1", "data2")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: