您的位置:首页 > 其它

动态显示文件名之 Intent和Menu

2015-10-24 21:22 232 查看
最初的想法:创建一个新的activity,然后用menu的方式在此 新的activity下显示文件名称。

根据逐步了解到的信息,采用listview控件完成此工作更加合适。本文主要总结前期针对Intent和Menu的使用。

1. Intent 使用

用于activity之间的通讯,例如activityA 中启动 activityB;或者activityA启用某个action,android中的action完全说明参考文献[2]。

(1) 为测试需要,首先增加一个activity。

(1.1) 在AndroidManifest.xml 中增加配置

<activity
android:name="com.example.filedel.FileDispActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
(1.2) 增加新的布局文件 /filedel/res/layout/file_display.xml

(1.3) 增加新的类: /filedel/src/com/example/filedel/FileDispActivity.java 并在其中override onCreate等接口。

(2) 新的activity建立后,在mainActivity中进行调用。

Intent调用分为显式调用和隐式调用,此处采用显式调用,直接指定要调用的activity对应的类。

Intent FileDispActivity = new Intent(MainActivity.this,FileDispActivity.class);
startActivity(FileDispActivity);

此处直接通过指明要调用的activity(FileDispActivity)类,来运行FileDispActivity,为显式调用,即一眼就能看出调用的哪个activity。

另外一种方式,隐式调用,代码如下:

Intent FileDispActivity = new Intent(Intent.ACTION_VIEW);
startActivity(FileDispActivity);

此处在创建新的Intent参数时,仅仅指明了Intent的action类型,而后所有注册为此action类型的activity都会被通知到。以此为例,我们在(1.1)节中设置了intent-filter,指明了此activity对应的action名字为VIEW,因而上述隐式调用命令中携带的Intent.ACTION_VIEW会由OS发送到此activity中,而后此activity检查自己注册了VIEW action,则响应OS的启动命令,进行activity的运行具体运行的activity由配置文件中的activity
android :name来指定其中创建对象时要添加ACTION_前缀。隐式调用的效果如下图,除了我们自己(红圈)的activity,还有其他的(绿线 )也被通知到了。



2. menu的使用

分为option menu和context menu。考虑到交互性,使用context menu。

context menu 需要和某个view进行关联,在使用之前,先要创建一个view组件,并将此view组件和menu进行关联,以后点击此view组件时,就会弹出创建的menu。

2.1 在中增加一个view组件

<TextView
android:id="@+id/menu"
android:layout_width="200dp"
android:layout_height="300dp"
android:layout_alignRight="@+id/filelist"
android:layout_below="@+id/hidenFile"
android:layout_marginTop="20dp"
android:text="@string/Menu" />
2.2 增加menu配置文件 /filedel/res/menu/contextmenu.xml,并在其中增加菜单项

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group android:id="@+id/group1"
android:visible="true"
android:checkableBehavior="all"
android:menuCategory="container"
android:enabled="false">
<item android:id="@+id/item1"
android:enabled="true"
android:menuCategory="container"
android:checked="false"
android:visible="true"
android:title="file1"
android:checkable="true"></item>
<item android:id="@+id/item2"
android:title="file"
android:visible="true"
android:enabled="true"
android:checkable="false"
android:checked="true"
android:menuCategory="container"></item>
</group>

</menu>


2.3 将初始创建的View控件注册为一个contextMenu,进行此种注册后,VIEW控件就类似一个button按键,每当按此VIEW控件时,就会弹出菜单

TextView menuTv= (TextView) findViewById(R.id.menu);
registerForContextMenu(menuTv);
2.4 override onCreateContextMenu的实现。其中调用了Menu的inflate,是为了从mainAcitivity中找出contextmenu对应的layout。假如在2.3中针对多个View控件注册了contextMenu,那么此处应该根据View中的ID等字段来分别inflate。

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

getMenuInflater().inflate(R.menu.contextmenu, menu);
}


参考资料:

1. Android Intent action 说明。
Intent action 主要介绍了intent filter中 action字段配置的意义及用途

2.intent action 大全 action详细说明

3. inflate
inflate说明 讲述inflate作用,某个activity中存在多个layout,从一个activity中找出某个layout。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: