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!

相關文章
相關標籤/搜索