(一)Android基础系列之:ActionBar

Android 弹无虚发之第一弹:Android 2.X平台完美兼容ActionBar以及Actionbar的常用攻略 自从谷歌发布 Android Design 设计规范后,越来越多的产品加入了ActionBar的设计,可以预见的是,这种界面模式,会越来越成为一种简约风格的标配。当初ActionBar这个API是在android 3.0之后加入的, 阅读详情

一、ActionBar的显示和隐藏

1、声明ActionBar对象

private ActionBar actionBar;

2、得到ActionBar对象

this.actionBar=this.getSupportActionBar();

3、启用ActionBar上的返回键

this.actionBar.setDisplayHomeAsUpEnabled(true);

4、显示和隐藏ActionBar

public void opeActionBar(View view){
    	Button button= (Button) view;
     	boolean isShowing=this.actionBar.isShowing();
     if(isShowing){
         this.actionBar.hide();//隐藏ActionBar
         button.setText("显示ActionBar");
    }else{
         this.actionBar.show();//显示ActionBar
         button.setText("隐藏ActionBar");
    }
}

5、添加menu菜单栏对象

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.menu_main, menu);
     return true;
 }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
     int id = item.getItemId();
     if (id == R.id.action_settings) {
            return true;
     }else if(id==android.R.id.home){//android.R.id.home的值就是ActionBar上显示的返回键的id
            this.finish();
            System.out.println("销毁当前Activity");
     }
     return super.onOptionsItemSelected(item);
}

二、ActionLayout,ActionProvider的使用

res/menu/menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <!--
     app:actionViewClass="android.support.v7.widget.SearchView":指定SearchView类的完整包名+类名;
     app:showAsAction="always":总是显示在ActionBar上
    -->
    <item
        android:id="@+id/action_file"
        android:orderInCategory="100"
        android:title="文件"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />
    <!--
      app:actionLayout="@layout/action_layout":指定当前条目关联的布局文件
      app:showAsAction="always|collapseActionView":showAsAction的值必须同时设置成always|collapseActionView才可以
      进行自由的展开和折叠,否则没有效果了.
    -->
    <item
        android:id="@+id/action_edit"
        android:orderInCategory="100"
        android:title="编辑"
        app:actionLayout="@layout/action_layout"
        app:showAsAction="always|collapseActionView" />
    <!--
     app:actionProviderClass="android.support.v7.widget.ShareActionProvider":指定ShareActionProvider的完整包名+类名
     -->
    <item
        android:id="@+id/action_view"
        android:orderInCategory="100"
        android:title="查看"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
        app:showAsAction="always" />
    <item
        android:id="@+id/action_navigate"
        android:orderInCategory="100"
        android:title="导航"
        app:showAsAction="always" />
    <item
        android:id="@+id/action_code"
        android:orderInCategory="100"
        android:title="编码"
        app:showAsAction="always" />
</menu>

Res/layout/action_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <AnalogClock
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/analogClock"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

展开ActionLayout

public void expandable(View view){
    //得到菜单项对象
   MenuItem menuItem_edit= this.menu.findItem(R.id.action_edit);
    //menuItem_edit.isActionViewExpanded():判断是否已经展开View对象
    if(!menuItem_edit.isActionViewExpanded()){
         menuItem_edit.expandActionView();//展开ActionView对象
    }
}

折叠ActionLayout

public void collapse(View view){
    //得到菜单项对象
    MenuItem menuItem_edit= this.menu.findItem(R.id.action_edit);
    //如果view已经展开,则进行折叠
    if(menuItem_edit.isActionViewExpanded()){
        menuItem_edit.collapseActionView();//折叠ActionView对象
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    this.menu=menu;

    MenuItem menuItem_file= menu.findItem(R.id.action_file);
    //得到SearchView的方式一:menuItem_file.getActionView()
    //SearchView searchView= (SearchView) menuItem_file.getActionView();

    //得到SearchView的方式二:MenuItemCompat.getActionView(menuItem_file)
    SearchView searchView= (SearchView) MenuItemCompat.getActionView(menuItem_file);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            System.out.println("====onQueryTextSubmit(String query=" + query + ")===");
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            System.out.println("===onQueryTextChange(String newText=" + newText + ")===");
            return false;
        }
    });

   MenuItem menuItem_edit= menu.findItem(R.id.action_edit);

    //给ActionLayout对注册展开和折叠时操作对应的监听器对象
    MenuItemCompat.setOnActionExpandListener(menuItem_edit, new MenuItemCompat.OnActionExpandListener() {
        /**
         * 展开ActionView对象时自动调用的方法
         * @param item
         * @return true:表示可以展开,否则不可以,此处必须为true
         */
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            textView_info.setText("展开了"+item.getTitle()+"对应的View对象");
            System.out.println("====onMenuItemActionExpand(MenuItem item="+item+")===");
            return true;
        }

        /**
         * 折叠ActionView时自动调用的方法
         * @param item
         * @return true:表示可以折叠,否则不可以,此处必须为true
         */
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            textView_info.setText("折叠了"+item.getTitle()+"对应的View对象");
            System.out.println("===onMenuItemActionCollapse(MenuItem item="+item+")====");
            return true;
        }
    });

   View view= menuItem_edit.getActionView();
   AnalogClock analogClock= (AnalogClock) view.findViewById(R.id.analogClock);
   analogClock.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this, "时钟被点击了!", Toast.LENGTH_SHORT).show();
        }
    });

    //得到查看菜单项对象
    MenuItem menuItem_view=menu.findItem(R.id.action_view);
    ShareActionProvider shareActionProvider= (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem_view);

    //shareActionProvider.setShareIntent(this.getShareTextIntent());
    shareActionProvider.setShareIntent(this.getShareImageIntent());
    return true;
}

三、ActionBar的选项卡模式的使用

this.actionBar=this.getSupportActionBar();
 // ActionBar.NAVIGATION_MODE_STANDARD:默认值,使用的菜单文件生成菜单项
 //ActionBar.NAVIGATION_MODE_TABS:显示成选项卡供用户进行选择
this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); //设置导航模式为选项卡模式

添加选项卡对象

ActionBar.Tab tab_file= this.actionBar.newTab();
tab_file.setText("文件");//设置选项卡显示的文字
tab_file.setIcon(R.mipmap.ic_launcher);//设置选项卡显示的图标
tab_file.setTabListener(tabListener);//给选项卡设置监听器对象
this.actionBar.addTab(tab_file);//将当前选项卡添加到ActionBar上

自定义选项卡监听器对象

private class MyTabListener implements ActionBar.TabListener {

        /**
         * 当选项卡处于选中状态时自动调用的方法
         * @param tab
         * @param ft
         */
        @Override
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            System.out.println("===onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)=====");
            MyFragment myFragment=new MyFragment();
            Bundle bundle=new Bundle();
            bundle.putString("title",tab.getText().toString());
            myFragment.setArguments(bundle);
            ft.replace(R.id.linearLayout_content,myFragment);
        }

        /**
         * 当选项卡失去选中状态时自动调用的方法
         * @param tab
         * @param ft
         */
        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            System.out.println("====onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)====");
        }

        /**
         * 当一个选项卡已经处于选中状态后用户又重新选中时自动调用的方法
         * @param tab
         * @param ft
         */
        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            System.out.println("===onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)=====");
        }
    }

四、ActionBar的列表模式的使用

private  String[] data={"文件","编辑","查看"};
this.fragmentManager=this.getSupportFragmentManager();

this.actionBar=this.getSupportActionBar();
this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);//设置ActionBar的导航模式为列表模式

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);

this.actionBar.setListNavigationCallbacks(adapter, new ActionBar.OnNavigationListener() {
//当选择actionBar上的导航条目时自动调用的方法
    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
       FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
        MyFragment myFragment=new MyFragment();
        Bundle bundle=new Bundle();
        bundle.putString("title",data[itemPosition]);
        myFragment.setArguments(bundle);
        fragmentTransaction.replace(R.id.linearLayout_content,myFragment);
        fragmentTransaction.commit();
        return false;
    }
});

五、通过功能清单文件设置主题

android:theme="@android:style/Theme.Translucent":透明主题
android:theme="@android:style/Theme.NoTitleBar.Fullscreen":没有标题栏和状态栏,即全屏显示
android:theme="@android:style/Theme.NoTitleBar":没有标题栏但有状态栏
【Android】关于ActionBar无法显示logo的问题 不知道大家有没有看过Google官方给出的培训教程,昨天我在看ActionBar这一节的时候,有一个问题一直困扰着我.这篇guide的链接我放在下面先.大家可以去看看,多看文档绝对收获多多. http://developer.android.com/guide/topics/ui/actionbar.html 其中有一段话,我截取下来跟大家一起看一下 我这个小菜鸟就献个丑 阅读详情

相关推荐

Android 切换Fragment时改变actionBar

这次在做项目时遇到一个问题,怎么在切换Fragment时,顺便改变一下actionBar。项目是一个Activity上面承载着四个Fragment,第一个Fragment要求标题栏上面有加号,第二个、第三个、第四个也有要求(这里就不多说了),反正就是每一个Fragment的标题栏上面的内容都不一样。 刚开始的时候,准备自己四个定义个actionBar,不用系统的。然后觉得不大方便,最后终于找

yang_jian1314的博客 4138

第一行代码学习总结(第三章)

UI开发的点点滴滴 常用控件的使用方法: TextView 他主要是用于在界面上显示一段文本信息 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schema......

梁恒嘉的博客(https://blog.crazymen.cn/) 497

Android 2.X平台完美兼容ActionBar以及Actionbar的常用攻略

Android 弹无虚发之第一弹:Android 2.X平台完美兼容ActionBar以及Actionbar的常用攻略 详细介绍请参考博客:http://blog.youkuaiyun.com/xy_nyle/article/details/17799753

Android学习:ActionBar简介

Android学习:ActionBar简介

weixin_47123512的博客 2379

android2.x使用ActionBar的例子

在android3.0版本之前使用ActionBar,出现了很多问题,比如overflow出不来,菜单项显示只有文字没有图标等,本例子解决了这些问题,在android2.3和android4.0测试通过

Android控件ActionBar浅析及适配2.x的方法介绍

Android控件ActionBar浅析及适配2.x的方法介绍

Android学习之路(11) ActionBar与ToolBar的使用

那找找为啥ActionBar的时候对的,直觉告诉我是theme的问题,于是找Theme.AppCompat.Light.DarkActionBar,点击进去看会看到actionBarPopupThem是Light的,就是menu菜单点击弹出那个actionBarTheme是深色系的,那么控制按钮图标和主副标题颜色就是白色的

qq_32907491的博客 3138

ActionBar在Android2.x的实现,类似新版微信界面

ActionBar在Android2.x的实现,类似新版微信界面

Android getSupportActionBar() 和 getActionBar()

我用 Androidstudio 1.5 ,目标版本4.0.3; 目前的的软件默认会带一个actionbar,就是程序启动后上方的一个类型Windows程序标题栏的东西; 按照书上的说法,可以通过  getActionBar().hide();隐藏;但是程序运行到这里崩溃了; 修改函数为:getSupportActionBar().hide(); ,隐藏成功了;

chinabinlang的专栏 2万+

电工识图入门:从电气符号到控制逻辑的完整指南

电工图纸是电气工程领域的通用语言,无论是设备安装、线路检修还是系统设计,看不懂图纸就像航海没有海图。很多初学者面对复杂的电气符号和线路走向感到无从下手,实际上只要掌握正确的识图方法,就能从简单的照明电路逐步过渡到复杂的自动化控制系统。 本文将从最基础的电气符号和图纸类型讲起,通过实际图纸案例解析,带你建立完整的识图逻辑。你将学会如何区分主回路和控制回路,如何追踪电流路径,以及如何结合图纸进行故障排查。无论你是电工新手、设备维护人员还是相关专业学生,这套方法都能帮你快速提升图纸理解能力。 1. 电气图纸基础:

chengyixian7877的博客 337

AWD线下攻防赛总结

在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量。8.Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压。进程线程:netstat / ps -aux/netstat -apt。4.查看/etc/init.d/rc.local中启动服务有无异常。1.不使用默认口令,修改成复杂的,并确保和web环境连接。5.使用脚本开启进程监控、目录监控、流量监控。文件操作监控.exe/御剑文件监控.exe。

XuJL89的博客 630

Android ActionBar应用一:ActionBar返回任意页面和顶部搜索栏实现

使用ActionBar实现返回任意界面和顶部搜索功能

苦咖啡的自留地 5089

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

Android中去掉ActionBar的几种方法

方法一:  在onCreate方法中添加一句代码 requestWindowFeature(Window.FEATURE_NO_TITLE);1 不过这句代码一定要添加到setContentView(R.layout.activity_main); 之前;  否则会报错(Caused by: android.util.AndroidRuntimeException: requestFe

swimming_in_IT_的博客 6864

基于STM32的录音机设计(STM32F103+VS1053B)

本项目设计并实现了一款基于STM32微控制器的便携式录音机。该录音机采用STM32F103C8T6作为主控芯片,结合VS1053B音频编解码模块、SD卡存储、OLED显示屏以及按键模块,提供了手动录音、自动录音和录音回放等多种功能。

1万+

工业4.0必备:C#上位机+数字孪生 生产线实时监控与智能预警系统(工业级实战)

数据割裂:PLC、传感器、工业相机的数据散落在不同系统,想看全局生产状态要切换N个软件,“数据孤岛”导致决策滞后;故障难预判:设备突发故障时,只能停机排查,平均故障响应时间超30分钟,一条生产线停工1小时损失超10万;可视化差:传统监控只有冰冷的数字和2D图表,设备运行状态、生产流程、物料流转无法直观感知,新人上手需3个月才能熟悉产线。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 659

Android ActionBar详解(一)--->显示和隐藏ActionBar

MainActivity如下: package cc.testsimpleactionbar0; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app....

weixin_30929011的博客 2901

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

Transformer-LSTM预测 | 基于Transformer-LSTM的多变量单步时间序列预测(Matlab)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 190

从零开始水安卓——ActionBar

概述 Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果。 Action bar的主要目的是: 可以通过ActionBar actionBar = this. getActionBar()获得ActionBar(如主题中设置了去掉ActionBar,则返...

旧日灯塔 1104

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

vLLM 显存泄漏与 OOM 深度排查:从日志到火焰图

系统性地排查 vLLM 运行中的显存泄漏和 OOM 问题,包括 CUDA 内存快照、PyTorch 内存分析器、火焰图工具。

kaixin110a的博客 186

Android ActionBar使用

Android ActionBar使用

zq2114522的专栏 2527

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android中ActionBar居中

经常会用到将ActionBar文字居中的问题,这里写个代码如下: //把actionBar的文字标题居中 public static void centerActionBarTitle(Activity activity) { int titleId = activity.getResources().getIdentifier("action_bar_t

不悔的青春 5179

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android ActionBar的源代码分析(一)

ActionBar是android的一个非常重要开发组件,在很多商业应用中到处可见,也是很多android开发人员必须熟练掌握的开发技术,下面就从源码角度来分析ActionBar的实现过程。 从哪里开始呢? 我们回忆一下在Activity中获取ActionBar的方法为getActionBar(),那就从getActionBar()开始研究吧! 打开getActionBar()的代码实现如下

呼啸而过的专栏 5041

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android ActionBar

ActionBar 1建立ActionBar Action bar 最基本的形式,就是为 Activity 显示标题,它告知用户他们当前所处的位置,并为你的 app 维护了持续的同一标识。 从 Android 3.0(API lever 11) 开始,所有使用 Theme.Holo 主题(或者它的子类)的 Activity 都包含了 action bar,当 targetSdkVersion 或 minSdkVersion 属性被设置成 “11” 或更大时,它是默认主题。 2添加ActionBar按钮 A

weixin_43664383的博客 1440

安卓开发ActionBar的使用

ActionBar是3.0之后出现的控件,取代menu,显示在标题栏位置。 通过getActionBar()得到对象。 1.普通ActionBar 创建方式与Menu(xml创建)一样,不过item中需要设定android:showAsAction属性,不设定就是默认never,item将为menu的item,选择always或者ifRoom将为ActionBar。

Mr.U爱学习 800
上一篇: Android NDK基础
下一篇: (二)Android基础系列之:数据存储
azhoufeng
博客等级 码龄10年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值