zoukankan      html  css  js  c++  java
  • Android中ActionBar的使用

    简介

    从Android3.0开始(targetSdkVersion或者minSdkVersion为11或者更高),ActionBar被包括在了所有主题为Theme.holo(或者子类)的主题当中。

    使用方法

    在ActionBar上的图标叫做ActionButtons,可以把不重要的ActionButtons放在ActionOverflows。

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
            android:id="@+id/action_share"
            android:actionProviderClass="android.widget.ShareActionProvider"
            android:showAsAction="ifRoom"
            android:title="@string/share"/>
        <item
            android:id="@+id/action_search"
            android:icon="@drawable/ic_action_search"
            android:showAsAction="ifRoom"
            android:title="@string/search"/>
        <item
            android:id="@+id/action_setting"
            android:showAsAction="always"
            android:title="@string/setting"/>
    
    </menu>

    在Activity中:

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            MenuItem shareItem = menu.findItem(R.id.action_share);
            return true;
        }

    自定义ActionBar background:

    1. 在Theme.xml中新建自定义Style,使其继承已有的Action Bar Style(Theme.holo)
    2. 复写其actionBarStyle属性
    3. actionBarStyle属性值指向另一个被覆写了background属性的Style
    4. 指定该background的属性值

    theme.xml:

    <resources xmlns:android="http://schemas.android.com/apk/res/android">
    
        <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
            <item name="android:actionBarStyle">@style/CustomBackground</item>
        </style>
    
        <style name="CustomBackground" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
            <item name="android:background">@drawable/actionbar_background</item>
        </style>
    ...

    设置ActionBar为Tab样式:

    ActionBar actionBar = getActionBar(); //for <3.0 getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            for (int i = 0; i < 3; i++){
                Tab tab = actionBar.newTab();
                tab.setText("Tab" + i);
                tab.setTabListener(null);
                actionBar.addTab(tab);
            }

    实现Tablistener回调方法:

            ActionBar.TabListener tabListener = new ActionBar.TabListener() {
                @Override
                public void onTabSelected(Tab tab, FragmentTransaction ft) {
                    Toast.makeText(MainActivity.this, "TabSelected" + tab.getPosition(), Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    
                }
    
                @Override
                public void onTabReselected(Tab tab, FragmentTransaction ft) {
    
                }
            };

     启用Overlay模式:

    ActionBar占用一定屏幕空间,可以使之自动隐藏,但是每次自动隐藏又会导致重新计算屏幕,可以设置其为Overlay模式以把ActionBar放在屏幕的上面而不是顶部。

    首先需要创建自定义theme,并设置android.windowActionBarOverlay属性为true。

    <style 
            name="CustomActionBarOverlayTheme"
            parent="@android:style/Theme.Holo"
            >
            <item name="android:windowActionBarOverlay">true</item>
            
        </style>

    如果要预留一定空间,可以指定PaddingTop:

    android:paddingTop="?android:attr/actionBarSize"

     添加ActionProvider:

    menu.xml:

        <item
            android:id="@+id/action_share"
            android:actionProviderClass="android.widget.ShareActionProvider"
            android:showAsAction="ifRoom"
            android:title="@string/share"/>

    在Activity代码中:(当前系统中能够发送图片的所有应用)

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            MenuItem shareItem = menu.findItem(R.id.action_share);
            mShareActionProvider = (ShareActionProvider) shareItem.getActionProvider();
            mShareActionProvider.setShareIntent(getDefaultIntent());
            return true;
        }
        
        private Intent getDefaultIntent() {
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("image/*");
            return intent;
        }
  • 相关阅读:
    前端开发:如何正确地跨端?
    开源微服务运行时 Dapr 发布 1.0 版本
    Flink 如何实时分析 Iceberg 数据湖的 CDC 数据
    为了让你在“口袋奇兵”聊遍全球,Serverless 做了什么?
    Serverless 如何在阿里巴巴实现规模化落地?
    altas(ajax)控件(十三):悬浮菜单HoverMenu
    MasterPage嵌套及MasterPage中的控件和变量的访问
    Linux下将CD音乐提取为mp3的方法和中文乱码问题的解决
    altas(ajax)控件(十四):为下拉控件添加快捷键查找功能的ListSearchExtender
    在atlas(ajax)中请不要使用Response.Write,请使用ClientScript.RegisterClientScriptBlock替换
  • 原文地址:https://www.cnblogs.com/dracohan/p/6007202.html
Copyright © 2011-2022 走看看