ApiDemo-ActionBar学习总结

     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); //以指定模式打开一输入流

你可能感兴趣的:(android,System,action,button,tabs,menu)