`
su1216
  • 浏览: 675475 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
深入入门正则表达式(jav...
浏览量:72476
E60283d7-4822-3dfb-9de4-f2377e30189c
android手机的安全问...
浏览量:129312
社区版块
存档分类
最新评论

android ActionBar与Menu - 1 - api demos 学习

阅读更多

android ActionBar与Menu - 1 - api demos 学习

android ActionBar与Menu - 2 - email中ActionBar分析

 

android2.x到现在的4.0有很大的差别,而手机开发者又没有经历过3.x版本的过渡,所以对于手机开发者的压力是比较大的,需要学习和适应大量新的组件与api

 

本文主要总结对ActionBar和Menu的学习

注意:这里以4.0为base

 

作为开发者,应该阅读下面重要新闻

谷歌敦促Android开发者停止使用菜单按钮

先说几句题外话

我个人觉得,应该保留实体menu按键,如果没有实体按键,那应该如何与menu交互?android提供了方案,使用action bar,action bar是显示在屏幕上的

等等,似乎有点问题,这也就是说:如果开发者需要menu,那么就需要消耗一部分屏幕的空间,虽然现在的手机很少有3寸以下的屏幕了,但是也没大到增加一个action bar而不使用户与开发者心疼的地步,起码我是这么觉得的

之前我可以隐藏状态栏标题栏但是保留menu,以后估计不行了

 

开始学习,以api demos - App - Action Bar中内容为主

 

menu的显示方式

boolean android.app.Activity.onCreateOptionsMenu(Menu menu)还是保留下来了的

MenuItem actionItem = menu.add("Action Button");
actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

setShowAsAction:设置ActionBar中menu的显示方式

显示方式一共有如下5种:

从不显示;如果有空间就显示;总是显示;显示时跟随文字;默认收缩其action view

/** Never show this item as a button in an Action Bar. */
public static final int SHOW_AS_ACTION_NEVER = 0;
/** Show this item as a button in an Action Bar if the system decides there is room for it. */
public static final int SHOW_AS_ACTION_IF_ROOM = 1;
/**
* Always show this item as a button in an Action Bar.
* Use sparingly! If too many items are set to always show in the Action Bar it can
* crowd the Action Bar and degrade the user experience on devices with smaller screens.
* A good rule of thumb is to have no more than 2 items set to always show at a time.
*/
public static final int SHOW_AS_ACTION_ALWAYS = 2;

/**
* When this item is in the action bar, always show it with a text label even if
* it also has an icon specified.
*/
public static final int SHOW_AS_ACTION_WITH_TEXT = 4;

/**
* This item's action view collapses to a normal menu item.
* When expanded, the action view temporarily takes over
* a larger segment of its container.
*/
public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;

其中SHOW_AS_ACTION_WITH_TEXT需要注意一下

在手机中,竖屏状态下text是不会显示的,切换到横屏才会显示text

 

SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW也需要特别说明一下

menu的每个item都可以设置action view,如果设置了,那么这个view默认是显示的,设置了SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW后,则默认不显示

 

另外需要说明的是:

现在手机有两种,一种是有实体按键的手机,不在action bar显示的item,按menu则会看到剩余的item

另一种是没有实体menu键的手机,他们通过action bar等触发menu,所有的item都会在action bar显示,“显示不下”的item会在action bar最后一个item触发显示剩余item列表,类似于之前我们按menu键后出现的“more”

(模拟器中可以选择是否有实体menu按键,编辑模拟器 - hardware - new - hardware back/home keys,添加此项选择no即可去掉实体按键)

 

 

ActionBar还提供了Tab功能

4.0中大家发现:TabActivity已经称为了过时的class,那么新的标签页如何实现,ActionBar提供一种简单的方式

final ActionBar bar = getActionBar();
final int tabCount = bar.getTabCount();
final String text = "Tab " + tabCount;
bar.addTab(bar.newTab()
        .setText(text)
        .setTabListener(new TabListener(new TabContentFragment(text))));

其中TabListener要实现ActionBar.TabListener,并实现如下几个函数

private class TabListener implements ActionBar.TabListener {
    public void onTabSelected(Tab tab, FragmentTransaction ft) {}
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
    public void onTabReselected(Tab tab, FragmentTransaction ft) {}
}

 函数从名称就能看出是做什么的了,不再赘述

 

上面是ApiDemos的示例,只需addTab即可

void android.app.ActionBar.addTab(Tab tab)
void android.app.ActionBar.addTab(Tab tab, boolean setSelected)
void android.app.ActionBar.addTab(Tab tab, int position)
void android.app.ActionBar.addTab(Tab tab, int position, boolean setSelected

除此之外,android也提供了remove和removeAll的api,不再列举

 

api demos中给出了Action Bar中使用menu的简单演示,效果如下

  

上面三个menu,下面两个,点击Sort之后弹出二级菜单

只需在xml中进行配置即可

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_search"
          android:icon="@android:drawable/ic_menu_search"
          android:title="@string/action_bar_search"
          android:showAsAction="ifRoom"
          android:actionViewClass="android.widget.SearchView" />
    <item android:id="@+id/action_add"
          android:icon="@android:drawable/ic_menu_add"
          android:title="@string/action_bar_add" />
    <item android:id="@+id/action_edit"
          android:icon="@android:drawable/ic_menu_edit"
          android:showAsAction="always"
          android:title="@string/action_bar_edit" />
    <item android:id="@+id/action_share"
          android:icon="@android:drawable/ic_menu_share"
          android:title="@string/action_bar_share"
          android:showAsAction="ifRoom" />
    <item android:id="@+id/action_sort"
          android:icon="@android:drawable/ic_menu_sort_by_size"
          android:title="@string/action_bar_sort"
          android:showAsAction="ifRoom">
        <menu>
            <item android:id="@+id/action_sort_size"
                  android:icon="@android:drawable/ic_menu_sort_by_size"
                  android:title="@string/action_bar_sort_size"
                  android:onClick="onSort" />
            <item android:id="@+id/action_sort_alpha"
                  android:icon="@android:drawable/ic_menu_sort_alphabetically"
                  android:title="@string/action_bar_sort_alpha"
                  android:onClick="onSort" />
        </menu>
    </item>
</menu>

 

当把手机变成横屏的时候,由于空间充足,Sort就会显示在Action Bar中,下图是点击Sort后的效果

 

我们点击By size和Alphabetically会发现,Sort的图标会跟着改变

public void onSort(MenuItem item) {
    mSortMode = item.getItemId();
    // Request a call to onPrepareOptionsMenu so we can change the sort icon
    invalidateOptionsMenu();
}

invalidateOptionsMenu会通知系统menu发生了改变,触发onPrepareOptionsMenu和onCreateOptionsMenu,然后再看看onPrepareOptionsMenu做了些什么

public boolean onPrepareOptionsMenu(Menu menu) {
    if (mSortMode != -1) {
        Drawable icon = menu.findItem(mSortMode).getIcon();
        menu.findItem(R.id.action_sort).setIcon(icon);
    }
    return super.onPrepareOptionsMenu(menu);
}

调用的时候会判断状态,根据状态设置Sort图标

 

当我们点击Search按钮的时候,它的Action View会显示出来

<item android:id="@+id/action_search"
      android:icon="@android:drawable/ic_menu_search"
      android:title="@string/action_bar_search"
      android:showAsAction="ifRoom"
      android:actionViewClass="android.widget.SearchView" />

xml中显示了Action View调用的是android.widget.SearchView这个class

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.actions, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(this);
    return true;
}

在这里为SearchView设置监听,onQueryTextChange在输入框文字修改时触发,onQueryTextSubmit在提交搜索时触发

 

在xml也可以设置ActionProvider,例如

<item android:id="@+id/menu_item_action_provider_action_bar"
    android:showAsAction="ifRoom"
    android:title="@string/action_bar_settings"
    android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/>

ActionProvider的使用暂时不做过多讨论


上面的图片是一个Action Bar,可以分为几个部分,他们都可以设置为显示或者不显示,从左至右依次为:

ActionBar.DISPLAY_HOME_AS_UP类似于提示作用,上图为一个脱字符(Up caret),不能单独只显示这个。。

ActionBar.DISPLAY_SHOW_HOME大大的android图片为home,当然这个默认为apk的图标,可以通过ActionBar.DISPLAY_USE_LOGO来设置使用什么图片

ActionBar.DISPLAY_SHOW_TITLE接下来的是title

ActionBar.DISPLAY_SHOW_CUSTOM然后是定制的View,可以通过void android.app.ActionBar.setCustomView(View view, LayoutParams layoutParams)设置

 

api demos中关于Action Bar的内容总结完了,我想掌握了这些,基本使用应该是没有问题了,之后打算在android源码中找些实例分析一下,待续

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

  • 大小: 10.9 KB
  • 大小: 12.8 KB
  • 大小: 13.7 KB
  • 大小: 10.8 KB
分享到:
评论
3 楼 xutian2008 2013-02-25  
不错,很全面
2 楼 su1216 2012-08-17  
zhongzhai 写道
action bar可以代码设置隐藏的getActionBar().hide();

不管怎样,你总得有个地方触发hide和show
以前适用menu键,而且不占用屏幕,还不需要额外的代码。现在就显得很不方便了
1 楼 zhongzhai 2012-08-17  
action bar可以代码设置隐藏的getActionBar().hide();

相关推荐

    ApiDemos ActionBarCompat-Styled

    `ApiDemos ActionBarCompat-Styled` 是一个针对Android平台的示例项目,它展示了如何在应用程序中使用`ActionBarCompat`库来实现与Android行动栏(ActionBar)兼容的样式。这个项目特别强调了如何在Android的不同...

    ApiDemos ActionBarCompat-ListPopupMenu

    通过学习和实践`ApiDemos`中的`ActionBarCompat-ListPopupMenu`示例,开发者可以掌握如何在不支持原生`ActionBar`的设备上实现高级UI功能,提升应用在旧设备上的用户体验。同时,这也有助于理解Android兼容性开发的...

    ApiDemos ActionBarCompat-Basic

    在ApiDemos项目中,你可能会看到如何启动和管理这种模式的示例。 7. **碎片(Fragment)**:`ActionBarCompat`通常与`Fragment`一起使用,允许在单个活动中展示多个视图。`Fragment`的生命周期和管理可以通过`...

    kernel-devel-4.18.0-553.45.1.el8-10.x86-64.rpm

    Rocky Linux 8.10内核包

    Simulink中三阶单环多位量化Σ-Δ调制器的设计与实现-音频带ADC的应用(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。

    计算机课后习题.docx### 【计算机科学】研究生入学考试计算机组成原理专项题库设计:考研复习资源集成与优化

    内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。

    __UNI__DB9970A__20250328141034.apk.1

    __UNI__DB9970A__20250328141034.apk.1

    minio-rsc-Rust资源

    rust for minio

    4-4-台区智能融合终端功能模块型式规范(试行).pdf

    国网台区终端最新规范

    《基于YOLOv8的化工管道焊缝缺陷检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    python源码-1个机器学习相关资源

    一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。

    pyqt离线包,pyqt-tools离线包

    pyqt离线包,pyqt-tools离线包

    《基于YOLOv8的船舶机舱灭火系统状态监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    SQL常用日期和时间函数整理及使用示例

    SQL常用日期和时间函数整理及在sqlserver测试示例 主要包括 1.查询当前日期GETDATE 2.日期时间加减函数DATEADD 3 返回两个日期中指定的日期部分之间的差值DATEDIFF 4.日期格式转换CONVERT(VARCHAR(10),GETDATE(),120) 5.返回指定日期的年份数值 6.返回指定日期的月份数值 7.返回指定日期的天数数值

    GSDML-V2.3-Turck-BL20-E-GW-EN-20160524-010300.xml

    GSDML-V2.3-Turck-BL20_E_GW_EN-20160524-010300.xml

    T_CPCIF 0225-2022 多聚甲醛.docx

    T_CPCIF 0225-2022 多聚甲醛.docx

    《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计

    蚕豆脱壳机设计.zip

    蚕豆脱壳机设计.zip

    附件2-2:台区智能融合终端入网专业检测单位授权委托书.docx

    台区终端电科院送检文档

    Y6一39一No23.6D离心通风机 CAD().zip

    Y6一39一No23.6D离心通风机 CAD().zip

Global site tag (gtag.js) - Google Analytics