0
点赞
收藏
分享

微信扫一扫

动态显示文件名之 Intent和Menu

耳一文 2023-01-31 阅读 60


  

       最初的想法:创建一个新的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,还有其他的(绿线 )也被通知到了。

           

动态显示文件名之 Intent和Menu_xml

    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。

举报

相关推荐

0 条评论