ctionbar在2.x及之前的版本使用中,要導入支持的jar包,如今在3.0以上的版本都包含有actionbar了,直接使用就能夠了。
html
1.按標題java
[html] view plaincopyprint?android
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?ide
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?字體
<?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?spa
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?
// 初始化時,該組件是展開的 searchView.setIconified(false);
而且,在menu中:
[html] view plaincopyprint?
android:showAsAction="ifRoom"
menu:
[html] view plaincopyprint?
<?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?
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?
<?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?
mactionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP|ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_CUSTOM|ActionBar.DISPLAY_SHOW_TITLE);
3.背景:
[html] view plaincopyprint?
bar.setBackgroundDrawable(getResources().getDrawable(R.drawable.BackBar));
backBar爲定義在style xml中的,僅僅是更改背景顏色。
[html] view plaincopyprint?
<drawable name="BackBar">#123400</drawable>
若是想改變彈出的pop背景色,修改主題就能夠,記得父主題不能是繼承的其餘自定義主題:
[html] view plaincopyprint?
<!-- 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?
<item name="android:textColor">@color/white</item>
4.修改title的顏色
[html] view plaincopyprint?
<style name="acbar_titlestyle"> <item name="android:textColor">@color/white</item> </style>
而後在actionbar的主題中引用:
[html] view plaincopyprint?
<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:titleTextStyle">@style/acbar_titlestyle</item>
5.修改item字體:
[html] view plaincopyprint?
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?
<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!