ApiDemo-ActionBar学习总结

来源:互联网 发布:电脑右下角激活windows 编辑:程序博客网 时间:2024/04/27 19:03

     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); //以指定模式打开一输入流
原创粉丝点击