【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")
相关文章推荐
- Android camera子系统HAL层介绍集锦
- Android开发工具综述,开发人员必备工具
- Android编程实现仿优酷旋转菜单效果(附demo源码)
- Android编程之软键盘的隐藏显示实例详解
- 野人学Android第二弹——多张图片批量上传
- android Google推荐的容器SparseArrayCompat简介
- android Google推荐的容器SparseArrayCompat简介
- Android应用读取Excel文件的方法
- Android 从硬件到应用程序:一步一步爬上去 5 -- 在Frameworks蒂姆层硬件服务
- Android Studio 快捷键
- 优酷Android 4.5客户端升级漏洞
- Android编程实现换肤功能实例
- Android之AlertDialog自定义对话框
- 彻底理解android中的内部存储与外部存储
- android中sharedPreferences的用法与json和数组的互转
- Android实现换肤的两种思路分析
- Android中Preference的使用以及监听事件分析
- [Android实例] BLE总结
- Android中的ListView初步接触(一)
- android解决相机拍照照片被旋转的问题