安卓开发——操作栏(Action Bar)的学习

操作栏具有显示应用图标,标题,安置菜单选项,配置应用图标为导航按钮等功能。

一、选项菜单(Option Menus)

在新版本的安卓中创建选项菜单并不难,步骤也很简单:

1.在XML中定义选项菜单

首先创建一个定义菜单的xml文件,这个文件放在res/menu目录下(没有的话自行创建)。在该xml文件下根标签为<menu>,然后使用<item>标签可以定义具体的菜单项。每个菜单项可以带有图标和文本显示。示例如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_item1"
          android:icon="@android:drawable/ic_menu_add"
          android:title="@string/item1_title"
          android:showAsAction="ifRoom|withText">
    </item>
</menu> 

android:icon —— 定义了菜单项的图标
android:title —— 定义了菜单项的标题
android:showAsAction —— showAsAction属性用于指定菜单选项是显示在操作栏上,还是隐藏到溢出菜单(overflow menu)中。该属性当前设置为ifRoom和withText的一个组合值。因此,只要空间足够,菜单项图标及其文字描述都会显示在操作栏上。

2.实例化菜单

无论是在Activity还是在Fragment中初始化菜单都是只需要重载onCreateOptionsMenu()方法后,使用参数中的MenuInflater来初始化菜单即可。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    /* 初始化菜单选项 */
    inflater.inflate(R.menu.menu_fragment_crime_list, menu);
}

注意:Fragment的onCreateOptionsMenu()方法是由FragmentManager调用的,同时我们需要在Fragment重载的onCreate()方法中申明需要接受选项菜单回掉函数。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /* Fragment的onCreate()中的设置,Activity中不需要 */
    setHasOptionsMenu(true);
}

3.响应菜单项选择

只需要重载onOptionsItemSelected()方法即可,在方法中负责处理各个菜单项的点击操作。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.menu_itme1:
            ...
            return true;
        case R.id.menu_itme2:
            ...
            return true;
        default:return  super.onOptionsItemSelected(item);
    }
}

二、实现层级导航

层级导航则是平时我们在应用中看到的左上方的< 返回这样的按钮,这里实现的是点击应用图标可以实现返回上一个Activity视图中。

启用应用图标导航

只要调用DisplayHomeAsUpEnabled(true)方法即可启用。该方法Activity和Fragment中都有,并且该方法是在API11以后才加入的,如果开发的应用版本低于这个,则需要做相应检测。

Activity中设置:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    getActionBar().setDisplayHomeAsUpEnabled(true);

Fragment中设置:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);

响应返回按钮

和菜单项按钮的操作一样,我们只需要重载onOptionsItemSelected()方法,并在里面处理按钮事件即可。
同菜单选项一样别忘了在Fragment中还需要额外的设置,即在Fragment的onCreate()中设置setHasOptionsMenu(true);
想要实现返回操作,主要有两种实现方式,方式一如代码中所示。
但是方法二的实现会更好,只要通过在AndroidMenifest.xml中给Activity配置元数据<meta-data>,即可配置该Activity的父Activity。这样子的方式比方法一要灵活,如果我们需要改变返回的父Activity,则只需要修改xml配置文件就可以了。

AndroidMenifest.xml配置。

<activity android:name=".ChildActivity" android:label="@string/app_name">
        <meta-data android:name="android.support.PARENT_ACTIVITY"
                   android:value=".ParentActivity"></meta-data>
</activity>

重载onOptionsItemSelected()方法处理按钮事件。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            /* 方法一实现返回上一级页面 
            Intent i = new Intent(getActivity(), CrimeListActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            */

            /*
            第二种方法,配合meta-data使用,查看是否定义了父ACTIVITY,然后结合NavUtils类实现返回上一级
            NavUtils类的实现代码既简洁又优雅。其次, 使用NavUtils类也可实现在manifest配置文件中统一管理activity间的关系。如果activity
            间的关系发生改变,无需费力地去修改Java代码,我们只要简单修改配置文件中的一行代码即可。
            */
            if(NavUtils.getParentActivityName(getActivity()) != null)
                NavUtils.navigateUpFromSameTask(getActivity());
            return true;

        default: return super.onOptionsItemSelected(item);
    }
}

控制导航按钮的显示

如果采用上面的方法二来实现导航按钮,我们还可以结合NavUtils类来实现对导航按钮的控制。
我们可以先判断当前Activity或Fragment是否含有父Activity,再决定是否启用图标导航功能。

if(NavUtils.getParentActivityName(getActivity()) != null)
    getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);

参考资料

《Android编程权威指南 第四版》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 设备与电脑之间进行数据传输时,我们通常使用 USB 接口。如果我们想要在 Android 应用中进行 USB 开发,我们需要了解一些基本的概念和步骤。 1. 获取 USB 权限 在 Android 应用中,如果要使用 USB 接口,需要获取 USB 权限。我们可以在 AndroidManifest.xml 文件中添加如下代码: ``` <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> ``` 此外,我们还需要注册 USB 广播接收器,以便在设备插入或移除时接收通知。在 AndroidManifest.xml 文件中添加如下代码: ``` <receiver android:name=".UsbBroadcastReceiver"> <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> </intent-filter> </receiver> ``` 2. 搜索 USB 设备 在 USB 开发中,首先需要搜索可用的 USB 设备。我们可以使用 UsbManager 类来获取当前连接的 USB 设备列表。例如: ``` UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList(); ``` 其中,deviceList 就是当前连接的 USB 设备列表。我们可以遍历这个列表,找到我们需要的设备。 3. 打开和关闭 USB 设备 找到需要的 USB 设备后,我们需要打开它。在 Android 中,我们可以使用 UsbDeviceConnection 类来打开 USB 设备。例如: ``` UsbDeviceConnection connection = usbManager.openDevice(device); ``` 在使用完 USB 设备后,我们需要关闭它。我们可以使用 UsbDeviceConnection 类的 close() 方法来关闭 USB 设备。例如: ``` connection.close(); ``` 4. 进行读写操作 在打开 USB 设备后,我们可以进行读写操作。在 Android 中,我们可以使用 UsbDeviceConnection 类的 bulkTransfer() 方法进行读写操作。例如: ``` byte[] buffer = new byte[1024]; int count = connection.bulkTransfer(endpoint, buffer, buffer.length, TIMEOUT); ``` 其中,endpoint 是 USB 端口,buffer 是数据缓冲区,TIMEOUT 是超时时间。bulkTransfer() 方法返回的是读取的字节数。 以上就是 Android USB 开发的基本步骤。需要注意的是,在进行 USB 开发时,我们需要根据具体的设备和需求来设置参数和操作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值