Actionbar使用的简单实例


ctionbar在2.x及之前的版本使用中,要导入支持的jar包,如今在3.0以上的版本都包含有actionbar了,直接使用就能够了。
html

1.按标题java

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片android

  1. public class MainActivity extends Activity {  
        private TextView txt;  
        private ActionBar bar;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            initView();  
        }  
      
        public void initView() {  
            txt = (TextView) findViewById(R.id.tv_txt);  
      
            bar = getActionBar();  
            bar.setDisplayHomeAsUpEnabled(true);  
        }  
          
        @Override  
        public boolean onOptionsItemSelected(MenuItem item) {  
            // TODO Auto-generated method stub  
            if(item.getItemId()==android.R.id.home){  
                Toast.makeText(this, "press home!!", 1000).show();  
            }  
            return super.onOptionsItemSelected(item);  
        }  
    }


2.图标微信

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片ide

  1. public class TestMain extends Activity {  
      
        private TextView txt;  
        private ActionBar bar;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            initView();  
        }  
      
        public void initView() {  
            txt = (TextView) findViewById(R.id.tv_txt);  
      
            bar = getActionBar();  
            bar.setDisplayHomeAsUpEnabled(true);  
        }  
      
        @Override  
        public boolean onCreateOptionsMenu(Menu menu) {  
            // TODO Auto-generated method stub  
            MenuInflater inflater = getMenuInflater();  
            inflater.inflate(R.menu.bar, menu);  
            return super.onCreateOptionsMenu(menu);  
        }  
      
        @Override  
        public boolean onOptionsItemSelected(MenuItem item) {  
            // TODO Auto-generated method stub  
            if (item.getItemId() == android.R.id.home) {  
                Toast.makeText(this, "press home!!", 1000).show();  
            } else if (item.getItemId() == R.id.menu_action_icon1) {  
                Toast.makeText(this, "action 1", 1000).show();  
            } else if (item.getItemId() == R.id.menu_action_icon2) {  
                Toast.makeText(this, "action 2", 1000).show();  
            }  
            return super.onOptionsItemSelected(item);  
        }  
      
    }


menu中的bar.xml:布局

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片字体

  1.  

  2. <?xml version="1.0" encoding="utf-8"?>  
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
      
        <item  
            android:id="@+id/menu_action_icon1"  
            android:showAsAction="ifRoom"  
            android:title="Action1"/>  
        <item  
            android:id="@+id/menu_action_icon2"  
            android:icon="@drawable/creep002"  
            android:showAsAction="ifRoom"  
            android:title="Action2"/>  
      
    </menu>


3.搜索this

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片spa

  1. public class TestMain extends Activity {  
        private ActionBar bar;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            initView();  
        }  
      
        public void initView() {  
            bar = getActionBar();  
            bar.setDisplayHomeAsUpEnabled(true);  
        }  
      
        @Override  
        public boolean onCreateOptionsMenu(Menu menu) {  
            // TODO Auto-generated method stub  
            MenuInflater inflater = getMenuInflater();  
            inflater.inflate(R.menu.bar, menu);  
            // 搜索  
            SearchView searchView = (SearchView) menu.findItem(R.id.menu_search)  
                    .getActionView();  
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {  
      
                @Override  
                public boolean onQueryTextSubmit(String query) {  
                    // TODO Auto-generated method stub  
                    // 跳转到搜索结果界面  
                    Intent intent = new Intent(TestMain.this, TestResult.class);  
                    intent.putExtra("str", query);  
                    startActivity(intent);  
                    return true;  
                }  
      
                @Override  
                public boolean onQueryTextChange(String newText) {  
                    // TODO Auto-generated method stub  
                    return false;  
                }  
            });  
            return super.onCreateOptionsMenu(menu);  
        }  
    }

若是想初始化的时候,searchview是伸展的,那么设置:.net

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. // 初始化时,该组件是展开的  
            searchView.setIconified(false);


而且,在menu中:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

android:showAsAction="ifRoom"


menu:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. <?xml version="1.0" encoding="utf-8"?>  
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
      
        <item  
            android:id="@+id/menu_search"  
            android:actionViewClass="android.widget.SearchView"  
            android:icon="@drawable/icon_search"  
            android:showAsAction="collapseActionView|ifRoom"  
            android:title="Search"/>  
       
    </menu>


4.下拉列表

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. public class TestMain extends Activity implements OnNavigationListener {  
        private ActionBar bar;  
        private int i = 0;  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            initView();  
        }  
      
        public void initView() {  
            bar = getActionBar();  
            bar.setDisplayHomeAsUpEnabled(true);  
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);  
      
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  
                    android.R.layout.simple_spinner_item, new String[] { "First",  
                            "Second","Third" });  
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
            bar.setListNavigationCallbacks(adapter, this);  
        }  
      
        @Override  
        public boolean onNavigationItemSelected(int itemPosition, long itemId) {  
            // TODO Auto-generated method stub  
            // 初始化的时候会响应一次,跳过初始化的那一次响应  
            if (i == 0) {  
                i++;  
                return false;  
            }  
            Toast.makeText(this, "pos:" + itemPosition, 1000).show();  
            return false;  
        }  
    }


固然,这个界面不是很友好(用arrayadapter或者spinner),那么最好就是自定义了。

5.pop:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  
    <item  
        android:id="@+id/menu_search"  
        android:actionViewClass="android.widget.SearchView"  
        android:icon="@drawable/icon_search"  
        android:showAsAction="collapseActionView|ifRoom"  
        android:title="Search"/>  
    <item  
        android:id="@+id/menu_action_icon2"  
        android:icon="@drawable/creep002"  
        android:showAsAction="ifRoom"  
        android:title="Action2">  
        <menu>  
            <item  
                android:id="@+id/menu_icon1"  
                android:icon="@drawable/creep001"  
                android:showAsAction="ifRoom"  
                android:title="Action1"/>  
            <item  
                android:id="@+id/menu_icon2"  
                android:icon="@drawable/creep001"  
                android:showAsAction="ifRoom"  
                android:title="Action2"/>  
        </menu>  
    </item>  
  
</menu>


弹出子组件,其实也能够使用分享组件。

注意:

1.android:showAsAction五个属性:
never:永远不会显示。只会在溢出列表中显示。
ifRoom:会显示在Item中,可是若是已经有4个或者4个以上的Item时会隐藏在溢出列表中。
always:不管是否溢出,总会显示。
withText:Title会显示

collapseActionView:可扩展的item。


2.actionbar的设置:

actionBar.hide()   :

隐藏标题栏

actionBar.show()  :

显示标题栏

setHomeButtonEnabled这个小于4.0版本的默认值为true的。可是在4.0及其以上是false,该方法的做用:决定左上角的图标是否能够点击。没有向左的小图标。 true 图标能够点击  false 不能够点击。
actionBar.setDisplayHomeAsUpEnabled(true)    :

给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
actionBar.setDisplayShowHomeEnabled(true)   :

使左上角图标是否显示,若是设成false,则没有程序图标,仅仅就个标题,不然,显示应用程序图标,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME
actionBar.setDisplayShowCustomEnabled(true)  :

使自定义的普通View能在title栏显示,即actionBar.setCustomView能起做用,对应ActionBar.DISPLAY_SHOW_CUSTOM
actionBar.setDisplayShowTitleEnabled(true)   :

对应ActionBar.DISPLAY_SHOW_TITLE。
其中setHomeButtonEnabled和setDisplayShowHomeEnabled共同起做用,若是setHomeButtonEnabled设成false,即便setDisplayShowHomeEnabled设成true,图标也不能点击。

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. mactionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP|ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_CUSTOM|ActionBar.DISPLAY_SHOW_TITLE);  


3.背景:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. bar.setBackgroundDrawable(getResources().getDrawable(R.drawable.BackBar));  


backBar为定义在style xml中的,仅仅是更改背景颜色。

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. <drawable name="BackBar">#123400</drawable>  

若是想改变弹出的pop背景色,修改主题就能够,记得父主题不能是继承的其余自定义主题:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. <!-- Application theme. -->  
       <style name="AppTheme" parent="android:style/Theme.Holo.Light">  
      
           <!-- All customizations that are NOT specific to a particular API-level can go here. -->  
           <item name="android:popupMenuStyle">@style/MyPopupMenu</item>  
       </style>  
      
       <style name="MyPopupMenu" parent="android:style/Widget.Holo.Light.ListPopupWindow">  
           <item name="android:popupBackground">#0000ff</item>  
       </style>

修改title的颜色的话,直接在使用的主题中改变textcolor就能够了:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. <item name="android:textColor">@color/white</item>  


4.修改title的颜色

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

<style name="acbar_titlestyle">  
       <item name="android:textColor">@color/white</item>  
   </style>

而后在actionbar的主题中引用:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">  
         <item name="android:titleTextStyle">@style/acbar_titlestyle</item>


5.修改item字体:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

MenuItem msgItem=imenu.findItem(R.id.menu_msg);  
        SpannableString spanmsg=new SpannableString("消息");  
        spanmsg.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanmsg.length(), 0);  
        msgItem.setTitle(spanmsg);

另外,应该能够在style中更改样式的,能够没找到这个方法,有知道的给我说下哈!

6.仿微信的按menu弹出扩展item的方法。其实没啥技巧的,实际上是布局的问题,要把扩展的showasaction item设置为可扩展。

例如:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
      
        <item  
            android:id="@+id/action_settings"  
            android:orderInCategory="100"  
            android:showAsAction="always"  
            android:title="@string/action_settings"/>  
        <item  
            android:showAsAction="always"  
            android:title="@string/action_settings"/>  
        <item  
            android:showAsAction="collapseActionView"  
            android:title="@string/action_settings">  
        </item>  
      
    </menu>

试试看吧,just go!

相关文章
相关标签/搜索