【Android】《第一行代码—Android》第二章总结
来源:互联网 发布:俄法战争 知乎 编辑:程序博客网 时间:2024/05/07 07:59
隐藏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()
方法
@Overridepublic 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】《第一行代码—Android》第二章总结
- 第一行代码Android第二章读书笔记
- 第一行代码Android 学习——第二章
- Android学习笔记—第一行代码第二章
- 【Android】《第一行代码—Android》第三章总结
- 【Android】《第一行代码—Android》第四章总结
- 【Android】《第一行代码—Android》第五章总结
- 【Android】《第一行代码—Android》第六章总结
- 【Android】《第一行代码—Android》第九章总结
- Android第一行代码(第二版)
- <android>第一行代码 第二章源码整理
- Android Studio 手动创建活动(Activity) 第一行代码 第二章
- 【Android】《第一行代码—Android》第一章总结
- 【Android】读《第一行代码》笔记总结
- 【未完成】Android第一行代码总结
- Android第一行代码学习笔记总结
- 【第一行代码】Android中UI总结
- 第一行代码+Android+第2版 笔记第二天
- Ubuntu 12.04 Gitolite 安装指南
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法【转】
- UFLDL教程答案(2):Exercise:Vectorization
- SSO之CAS单点登录部署
- (终端)Git命令-->基本使用(新手)
- 【Android】《第一行代码—Android》第二章总结
- 工作调度--cron
- 重新安装JDK造成weblogic实例无法无法启动问题
- USB驱动结构分析
- android Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER解决方案
- HDU 5212 Code(容斥)
- 一个5位数,判断它是不是回文数,另一种思路JAVA实现
- zzulioj--1813--good string(模拟)
- 分布式文件系统元数据分布方案对比