当前位置: 主页 > 安卓开发 > android开发 >

ActionBar学习总结

泡在网上的日子 发表于 2012-12-25 22:33 次阅读 ActionBar,android

ActionBar是Google在3.0中引入的另类menu菜单,不同与menu的是, 它显示在界面顶端,它比menu更灵活,更简洁。在4.0版本的应用中多有使用,例如短信,浏览器,图库。它会根据屏幕的布局显示情况,决定显示为传统的menu还是ActionBar。一般ActionBar也会定义和menu相同的菜单定义文件,在Activity中同样通过onCreateOptionsMenu(Menu menu)加载此布局,根据menu定义文件的属性决定是否显示为ActionBar。

一,ActionBar的显示选项。通过 ActionBar.setDisplayOptions(change, flags)可设置ActionBar的显示选项。

ActionBar.DISPLAY_HOME_AS_UP      在ActionBar左边显示'<'图标,在应用中可以通过点击此图标回到应用的主页。

ActionBar.DISPLAY_SHOW_HOME      在ActionBar左边显示Home图标,就是此应用的icon图标,点击它也可以返回到首页。

ActionBar.DISPLAY_USE_LOGO           在Home图标的位置显示我们设置的logo图标,Activity的android:logo="@drawable/apidemo_androidlogo"属性

ActionBar.DISPLAY_SHOW_TITLE       显示图标后面的标题名称,Activity的lable属性

ActionBar.DISPLAY_SHOW_CUSTOM      显示通过setCustomView添加到ActionBar的自定义View

ActionBar.NAVIGATION_MODE_TABS     设置此属性,将显示我们添加到ActionBar的Tab,类似于TabHost


二,设定menu选项是否以ActionBar方式显示。设定menu中item的showAsAction属性。

android:showAsAction="ifRoom" 如果屏幕顶部有足够空间,菜单项显示为ActionBar

android:showAsAction="always" 菜单项总是显示为ActionBar

android:showAsAction="never" 菜单项不会显示为ActionBar


三,在布局文件中指订ActionBar的View  使用android:actionViewClass="android.widget.SearchView"属性,当点击此ActionBar的图标会显示指定的View。

四,ActionBar也可以的添加,就像动态添加菜单一样。

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

五,使用ActionBar显示TabHost的效果。

添加tab项

final ActionBar bar = getActionBar();    //得到ActionBar对象
bar.addTab(bar.newTab()                  //添加tab项
.setText(text) //设置tab标签标题
.setTabListener(new TabListener(new TabContentFragment(text))));  //设置tab的内容

设置ActionBar以Tab导航模式显示

bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

,在布局文件中设置Button的单击事件,设置Button的android:onClick="onAddTab" 属性,其中onAddTab需要在Button启用的Activity中定义此方法,当Button被点击时就会调用次方法。

七,使用ActionProvider。 ActionProvider可以为ActionBar或者menu提供一个动作内容,例如转去Settings,Message,和Activity的跳转很类似。

首先需要定义ActionProvider

public static class SettingsActionProvider extends ActionProvider {
    /** An intent for launching the system settings. */
    private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS);
    /** Context for accessing resources. */
    private final Context mContext;
    /**
     * Creates a new instance.
     *
     * @param context Context for accessing resources.
     */
    public SettingsActionProvider(Context context) {
        super(context);
        mContext = context;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public View onCreateActionView() {
        // Inflate the action view to be shown on the action bar.
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.action_bar_settings_action_provider, null);
        ImageButton button = (ImageButton) view.findViewById(R.id.button);
        // Attach a click listener for launching the system settings.
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mContext.startActivity(sSettingsIntent);
            }
        });
        return view;
    }
    /**
     * {@inheritDoc}
     */
    @Override
    public boolean onPerformDefaultAction() {
        // This is called if the host menu item placed in the overflow menu of the
        // action bar is clicked and the host activity did not handle the click.
        mContext.startActivity(sSettingsIntent);
        return true;
    }
}

然后将ActionProvider添加到ActionBar中,设置android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"属性就可以,

这样,点击这个ActionBar就会转到设定的Activity。感觉这个类似于给以个Button添加了监听。


八,菜单布局的加载方法,在onCreateOptionsMenu方法中使用getMenuInflater().inflate(R.menu.action_bar_settings_action_provider, menu);

九,Activity中使用的流

inputStream = getResources().openRawResource(R.raw.robot);   //打开Raw资源文件夹的流,读取其中指定的图片
outputStream = openFileOutput(SHARED_FILE_NAME,Context.MODE_WORLD_READABLE | Context.MODE_APPEND); //以指定模式打开一输入流



上一篇:ActionBar中的下拉菜单操作NAVIGATION_MODE_LIST
Android的actionbar可以添加下拉菜单,在android4.0以上的原生日历中,就使用了此方法。 在ActionBar中添加下拉菜单,主要有一下几个关键步骤: 1. 生成一个 SpinnerAdapter ,设置ActionBar的下拉菜单的菜单项 2. 实现 ActionBar.OnNavigationListener 接口
下一篇:自定义 Android 消息对话框 (AlertDialog) 的样式
Android 提供了 AlertDialog类可通过其内部类 Builder轻松创建对话框窗口,但是没法对这个对话框窗口进行定制,为了修改 AlertDialog 窗口显示的外观,解决的办法就是创建一个指定的 AlertDialog 和 AlertDialog.Builder 类。 定义外观 我们希望将上面默认的