专栏首页刘晓杰actionbar(Android开源项目)

actionbar(Android开源项目)

今天又学习了github上的一个开源库,地址:https://github.com/JakeWharton/ActionBarSherlock 我把其中几个我认为比较常用的功能选取出来分享给大家 另外还截了图供大家比对了看,并没有什么难度

    /**
     * getActionBar改变Home部分,menu.add改变Menu Item
     */
    // Menu对应导入的包com.actionbarsherlock.view.Menu
    // MenuItem对应导入的包com.actionbarsherlock.view.MenuItem
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 设置背景图片,默认撑满整个ActionBar
        getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_actionbar));
        // 透明背景
        getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ab_bg_black));

        /**
         * Home部分,用来显示Logo,主副标题
         */
        // 默认存在home区域,如果不想要,设为false
        getActionBar().setDisplayShowHomeEnabled(true);

        // 默认存在Logo,且是app的icon,当然也可以自己设置。不想要Logo设为false
        // 如果setDisplayShowHomeEnabled设为false则下面两行无效
        getActionBar().setDisplayUseLogoEnabled(true);
        getActionBar().setLogo(R.drawable.girl);

        // 显示主副标题。默认为true
        getActionBar().setDisplayShowTitleEnabled(true);
        getActionBar().setTitle("主标题");
        getActionBar().setSubtitle("副标题");

        // setDisplayHomeAsUpEnabled(true)可以响应onOptionsItemSelected
        // 响应Home区域的点击效果,id=android.R.id.home
        getActionBar().setDisplayHomeAsUpEnabled(true);

        /**
         * menu.add改变Menu Item
         */
        // 最常见的MenuItem。由于参数改变getMenuInflater无法使用
        // getMenuInflater().inflate(R.menu.main, menu);
        menu.add(0, Menu.FIRST, 0, "title")
                .setActionView(R.layout.collapsible_edittext)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

        // 自定义button视图
        // item1的id=(Menu.FIRST+1),但button不是,所以无法响应onOptionsItemSelected
        // 只能setOnClickListener
        Button button = new Button(this);
        button.setText("新增");
        menu.add(0, Menu.FIRST + 1, 0, null).setActionView(button)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Button", Toast.LENGTH_SHORT)
                        .show();
            }
        });

        // 自定义button视图。可以响应onOptionsItemSelected
        // 但是非icon区域也会受点击响应的影响
        // 点击后打开系统设置界面
        menu.add(0, Menu.FIRST + 2, 0, null).setIcon(R.drawable.add2)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        // 显示进度条。oncreate函数里面要有requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        // 注意,是在setContentView前面加
        setSupportProgressBarIndeterminateVisibility(true);
        return true;
    }
    /**
     * getActionBar改变Home部分,menu.add改变Menu Item
     */
    // Menu对应导入的包com.actionbarsherlock.view.Menu
    // MenuItem对应导入的包com.actionbarsherlock.view.MenuItem
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        ......

        // setCustomView是定制视图.它和setActionView区别在于:
        // ActionView可以通过setShowAsAction来改变自己的位置
        // setCustomView不能,只能通过setDisplayShowCustomEnabled来隐藏
        getActionBar().setDisplayShowCustomEnabled(true);
        final View customNav = LayoutInflater.from(this).inflate(
                R.layout.custom_view, null);
        getActionBar().setCustomView(customNav);
        ((RadioGroup) customNav.findViewById(R.id.radio_nav))
                .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId) {
                        RadioButton button = (RadioButton) customNav
                                .findViewById(checkedId);
                        Toast.makeText(
                                MainActivity.this,
                                "Navigation selection changed to "
                                        + button.getText().toString(),
                                Toast.LENGTH_SHORT).show();
                    }
                });

        // setNavigationMode
        getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1);
        adapter.add("hello2");
        adapter.add("hello1");
        adapter.add("hello3");
        getActionBar().setListNavigationCallbacks(adapter,
                new OnNavigationListener() {
                    @Override
                    public boolean onNavigationItemSelected(int itemPosition,
                            long itemId) {
                        Toast.makeText(MainActivity.this,
                                adapter.getItem(itemPosition),
                                Toast.LENGTH_SHORT).show();
                        return true;
                    }
                });
        return true;
    }
    /**
     * getActionBar改变Home部分,menu.add改变Menu Item
     */
    // Menu对应导入的包com.actionbarsherlock.view.Menu
    // MenuItem对应导入的包com.actionbarsherlock.view.MenuItem
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        ...

        // Tab。注意导的包要一致
        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (int i = 1; i <= 3; i++) {
            ActionBar.Tab tab = getSupportActionBar().newTab();
            tab.setText("Tab " + i);
            tab.setTabListener(this);
            getSupportActionBar().addTab(tab);
        }
        return true;
    }

我把我的代码放到了这里,可以参考:http://download.csdn.net/detail/lxj1137800599/9548296

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 单例模式探究

    单例模式的五种写法: 懒汉 恶汉 静态内部类 枚举 双重校验锁

    提莫队长
  • RN实现TabNavigator

    提莫队长
  • retrofit的使用

    提莫队长
  • vue.js中的computed计算属性如何传递参数

    笔者参考博客https://blog.csdn.net/qq_35775675/article/details/82288571的做法后,的确成功了 。

    acoolgiser
  • SQL 中的日期和时间类型

    在我们SQL中一般支持三种数据类型。 date:日历日期,包括年(四位),月和日。 time: 一天中的时间,包括小时,分和秒。可以用变量time(p)来表示秒...

    Dato
  • 如何向通过TCP socket给服务器端发送的数据里注明自己的客户端地址

    客户端连接成功后,马上发起一个subscribe请求。 但是服务器端拿到这个请求的payload后,不知道是哪一个客户端发起的。

    Jerry Wang
  • 微信支付大规模前端开发背后,如何用外包解决困境

    摘要 业务高速发展离不开各种配套运营系统的高效建设,微信支付也不例外。在前端人力极其匮乏的条件下我们另辟蹊径,大规模引入外包团队协同作业,并且在如何保证效率和质...

    IT大咖说
  • 成为靠谱的数据科学家 | 从提出正确的问题开始

    作为一名数据科学家,在我们讨论如何通过正确的提问对问题进行定义前,让我们首先看到为什么提出正确的问题如此重要。

    CDA数据分析师
  • Tomcat架构配置

    老七Linux
  • Android程序员的救赎之路(二)

    上回说到要举一个例子来说明,在看例子前,我们先来说说问题,有时我们会在工作中遇到很难的专业问题,如设计一个业务算法或用OpenGL做3D特效,这类的问题虽然不简...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券