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!