Android四大控件之Activity详解:实践篇
Hi,众猿们,今天给大家讲讲在安卓开发中如何使用Activity吧,主要有以下几个问题:
先谈谈Activity的创建和使用,首先,我们在项目的res/layout文件夹下创建一个xml布局文件(暂且命名为main.xml吧,众猿们要记住布局文件这个词),并在其中添加一个按钮控件,其内容如下:
<?xml version="1.0" encoding="utf-8"?><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打渠道包的方法
- 4.0、Android(安卓)Studio配置你的构建
- Android中各种Adapter的使用方法
- 采用busybox 代替android 自带的shell
- Android(安卓)NDK开发技巧二
- Android(安卓)APK加固后如何签名
- Android启动过程以及各个镜像的关系
- OpenCV4Android(安卓)环境配置(最新详细教程)
- Android(安卓)Q之提前适配攻略(五)(存储权限变更)