Action Bar_pull the bar

Action Bar_pull the barAction Bar 的相关操作

大家好,又见面了,我是你们的朋友全栈君。

要想将所有Activity 的Action Bar隐藏或者单独隐藏某个或某几个Activity中的Action Bar

只需要再AndroidManifest.xml中将对应的theme改成后缀为 NoActionBar, 如

       <activity android:name=".Demo01"
            //更改当前Activity的ActionBar为隐藏状态
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

但这种方式的缺陷在于, 一旦设置 , 再程序运行时不能更改 , 不能灵活的隐藏和显示 ,

可以通过 

        //获取当前ActionBar
        actionBar = getSupportActionBar();

 通过

 actionBar.hide();
 actionBar.show();

 显示和隐藏ActionBar

public class ActionBarDemo extends AppCompatActivity {

    private boolean ActionBarIsShow = true;
    private ActionBar actionBar;
    private Button actionBarBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_action_bar_demo);
        actionBarBtn = findViewById(R.id.actionBarBtn);
        //获取当前ActionBar
        actionBar = getSupportActionBar();
    }

    @SuppressLint("SetTextI18n")
    public void showActionBar(View view) {
        if (ActionBarIsShow){
            //隐藏ActionBar
            actionBar.hide();
            actionBarBtn.setText("显示ActionBar");
            ActionBarIsShow = false;
        }else {
            //显示ActionBar
            actionBar.show();
            actionBarBtn.setText("隐藏ActionBar");
            ActionBarIsShow = true;
        }
    }
}

添加Action Item

  • 定义菜单资源文件
  • 在onCreateOptionsMenu()方法中加载菜单资源文件

 要在ActionBar上添加图标, 需要先创建资源文件, 在res目录下创建menu目录

然后创建menu.xml资源文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/search"
        android:icon="@drawable/icon_search"
        android:title="search"
        app:showAsAction="always"
        />
     <!--showAsAction 下的选项 always : 总是显示在ActionBar上-->
                           <!--ifRoom : 当Action有可用空间时就显示在ActionBar上-->
                                    <!--没有足够空间,就显示在溢出菜单中-->
                           <!--never  : 表示菜单项永远都不显示在ActionBar上-->
                            <!--withText: 将菜单项显示在ActionBar上,并且显示文本,-->
                                    <!--受到ActionBar空间的显示,文本可能显示不全-->
    <item
        android:id="@+id/home"
        android:icon="@drawable/icon_home"
        android:title="主页"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/setting"
        android:title="设置"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/about"
        android:title="关于"
        app:showAsAction="never" />
</menu>

然后在Java代码中,重写onCreateOptionsMenu方法


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //实例化一个MenuInflater对象
        MenuInflater inflater = getMenuInflater();
        //解析菜单文件
        inflater.inflate(R.menu.menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

添加Action View

在item里更改 search的item

        <item
        android:id="@+id/search"
        android:icon="@drawable/icon_search"
        android:title="搜索"
        app:showAsAction="always"

        app:actionViewClass="android.support.v7.widget.SearchView" />
        <!--添加searchView实现类(android自带)-->

这样点击搜索图标会自动弹出搜索框

响应Action按钮的点击事件, 重写onOptionsItemSelected方法

通过方法传入的MenuItem参数调用它的getItemId()方法和menu资源中的id进行比较

从而辨别出用户点击的是哪一个Action按钮

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.home:
                Toast.makeText(this, "点击了主页按钮", Toast.LENGTH_SHORT).show();
            default:
                return super.onOptionsItemSelected(item);

        }
    }

Action Bar实现层级导航, 在子页面中显示返回箭头

2271862b397b28e2948b482285d0897089d.jpg

新建两个Acitvity Demo02和NewActivity Demo02作为主页面

在Demo02 中添加一个Button ,点击Button跳转到NewActivtiy的页面

NewActivity的源码

public class NewActivity extends AppCompatActivity {

    @SuppressLint("RestrictedApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
        //判断父Activity是否为空,不为空设置导航图标显示
        if (NavUtils.getParentActivityName(NewActivity.this) != null) {
            //显示向左的箭头图标
            getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
        }
        //需要在AndroidManifest.xml文件中添加meta标签
//        <activity android:name=".Demo02.NewActivity"
//        android:label="新页面">
//        <meta-data
//        android:name="android.support.PARENT_ACTIVITY"
//        android:value=".Demo02.NewActivity" />
//        这个设置父Activity
//        </activity>

    }
}

 

转载于:https://my.oschina.net/lanyu96/blog/2981028

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107152.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何区别标准POE交换机和非标POE交换机[通俗易懂]

    如何区别标准POE交换机和非标POE交换机[通俗易懂]通俗的说,POE交换机就是支持网线供电的交换机,其不但可以实现普通交换机的数据传输功能还能同时对网络终端进行供电。那么,我们该如何来区别如何区别标准POE交换机和非标POE交换机呢?接下来我们就跟随飞畅科技的小编一起来详细看看吧!一、什么是POE交换机PoE供电交换机是指能够通过网线为远端受电终端提供网络供电的交换机,包含网络交换机和PoE供电两个功能,是PoE供电系统中比较常见的供电设备。二、POE交换机的分类1、标准POE交换机符合IEEE802.3af、802.3at标准,就是标准P..

  • 带你从零开始,快速学会 Matlab GUI

    带你从零开始,快速学会 Matlab GUI本文来自作者 木木小迷哥 在 GitChat 上分享「MatlabGUI零基础学员快速入门」,「阅读原文」查看交流实录「文末高能」编辑|洛肯Matlab广泛地应用于数学分析、计算、自动控制、系统仿真、数字信号处理、图像处理、数理统计、人工智能、通信工程和金融系统等领域。本活动针对零基础学员,结合个人经验,使Matlab新手少走弯路、快速入门(相应的代码用斜体

  • 海尔楼宇可视对讲

    海尔楼宇可视对讲海尔楼宇可视对讲我公司是青岛海尔集团内的智能化产品生产企业。生产楼宇可视对讲等智能化设备,以海尔的品质为您的楼盘提升价值。 室内分机分类序号类型图片显示屏安装方式主要功能1黑白可视对讲分机HR-Q100AV 4寸黑白CRT壁挂式安装★免提通

  • vue父组件操作子组件的方法_vue父组件获取子组件数据

    vue父组件操作子组件的方法_vue父组件获取子组件数据父组件和子组件我们经常分不清什么是父组件,什么是子组件。现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件。具

  • C++ 重制植物大战僵尸(Cocos2dx开源项目)

    此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943最新视频–>点击观看开源代码下载提取码:3vzm点击下载–>11月28日新增…

  • 集合和数组的相互转换

    集合和数组的相互转换集合和数组相互转换很多时候API的方法只支持集合或数组,比如适配器类中的数据只支持集合,这时候我们就要把数组转换集合。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号