actionbar的条件是
1.高于3.0版本的或者 android:targetSdkVersion 属性被设置成11或者更高
2.低于3.0的版本 在libs里面添加以下v7 安装包
1.创建actionbar(方法两种)
a。动态添加
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private ActionBar actionBar;
private Button tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
actionBar = getActionBar();
actionBar.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// 添加菜单
MenuItem add = menu.add(0, 0, 0, "add");
MenuItem del = menu.add(0, 0, 0, "del");
MenuItem save = menu.add(0, 0, 0, "save");
MenuItem save1 = menu.add(0, 0, 0, "save1");
MenuItem save2 = menu.add(0, 0, 0, "save2");
MenuItem save3 = menu.add(0, 0, 0, "save3");
// 绑定到actionbar
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
del.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
save.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
save1.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
save2.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
save3.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
}
SHOW_AS_ACTION_ALWAYS: 总是将该menuitem显示在actionbar上
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该ActionView折叠成普通菜单项
SHOW_AS_ACTION_IF_ROOM:当actionbar位置足够时才显示在actionbar上。
SHOW_AS_ACTION_NEVER:不将该menuitem显示在actionbar上。
SHOW_AS_ACTION_WITH_TEXT:把menuItem显示在actionbar上,并且显示该菜单项的文本。
b.静态创建actionbar
在res下创建 menu/menu.xml
package com.wang.android.myactionbar;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private ActionBar actionBar;
private Button tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.menu, menu);
return true;
}
}
menu/menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item1"
android:orderInCategory="1"
android:showAsAction="ifRoom|withText"
android:title="save"/>
<item
android:id="@+id/item2"
android:orderInCategory="2"
android:showAsAction="ifRoom|withText"
android:title="edit2"/>
<item
android:id="@+id/item3"
android:orderInCategory="3"
android:showAsAction="ifRoom|withText"
android:title="edit3"/>
<item
android:id="@+id/item4"
android:orderInCategory="5"
android:showAsAction="ifRoom|withText"
android:title="edit4"/>
<item
android:id="@+id/item5"
android:orderInCategory="4"
android:showAsAction="ifRoom|withText"
android:title="edit5"/>
</menu>
2.点击事件
调用 onOptionsItemSelected(MenuItem item)方法
调用 onOptionsItemSelected(MenuItem item)方法
代码
package com.wang.android.myactionbar;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private ActionBar actionBar;
private Button tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(this, "item1", 2000).show();
break;
case R.id.item2:
Toast.makeText(this, "item2", 2000).show();
break;
case R.id.item3:
Toast.makeText(this, "item3", 2000).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
把onptionsItemSelected方法换成这个也可以 。。目前没有太大问题
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(this, "item1", 2000).show();
break;
case R.id.item2:
Toast.makeText(this, "item2", 2000).show();
break;
case R.id.item3:
Toast.makeText(this, "item3", 2000).show();
break;
default:
break;
}
return super.onMenuItemSelected(featureId, item);
}
3.actionbar home图标区
可以在mainfest中设置 android:icon="@drawable/ic_launcher" 改变图标的样子
// 而如果想要对home图标进行点击时间处理,则需要在为这个icon“使能”:
// actionBar.setDisplayHomeAsUpEnabled(true);
// 此home图标的id便是androi.R.id.home;
// actionBar.setDisplayHomeAsUpEnabled(true);
// 此home图标的id便是androi.R.id.home;
package com.wang.android.myactionbar;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private ActionBar actionBar;
private Button tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = this.getActionBar();
if (actionBar != null) {
// icon点击使能
// 而如果想要对home图标进行点击时间处理,则需要在为这个icon“使能”:
// actionBar.setDisplayHomeAsUpEnabled(true);
// 此home图标的id便是androi.R.id.home;
actionBar.setDisplayHomeAsUpEnabled(true);
}
// actionBar.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(this, "home", 2000).show();
break;
case R.id.item1:
Toast.makeText(this, "item1", 2000).show();
break;
case R.id.item2:
Toast.makeText(this, "item2", 2000).show();
break;
case R.id.item3:
Toast.makeText(this, "item3", 2000).show();
break;
default:
break;
}
return super.onMenuItemSelected(featureId, item);
}
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// // TODO Auto-generated method stub
// switch (item.getItemId()) {
// case R.id.item1:
// Toast.makeText(this, "item1", 2000).show();
// break;
// case R.id.item2:
// Toast.makeText(this, "item2", 2000).show();
// break;
//
// case R.id.item3:
// Toast.makeText(this, "item3", 2000).show();
// break;
//
// default:
// break;
// }
// return super.onOptionsItemSelected(item);
// }
}
一般home都是返回到主activity
可以这样写
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Toast.makeText(getApplicationContext(), "android.R.id.home", 0)
.show();
break;
如果选择返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。
使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在,所有在其上的activity都会被销毁,然后主activity会到栈顶,而不用创建主Activity的的新实例。
4.选项卡区域
tabs = (Button) findViewById(R.id.tabs);
tabs.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
actionBar.setTitle("选项卡");
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(actionBar.newTab().setText("Tab1")
.setTabListener(MainActivity.this));
actionBar.addTab(actionBar.newTab().setText("Tab2")
.setTabListener(MainActivity.this));
actionBar.addTab(actionBar.newTab().setText("Tab3")
.setTabListener(MainActivity.this));
}
});
findViewById(R.id.list).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String[] str = { "1", "2", "3", "4", "5" };
actionBar.setTitle("列表");
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_item, str),
MainActivity.this);
}
});
5.视图
基本都在onCreateOptionsMenu(Menu menu)方法里面添加
添加一个搜索 视图
在menu里面加一个这个就可以了
<item
android:id="@+id/search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|withText"
android:title="Search"
/>
主函数中
// 搜索時間
SearchView searchView = (SearchView) menu.findItem(R.id.search)
.getActionView();
分享 视图
// 添加分享按钮的事件
// 4.0以下没有ShareActionProvider
MenuItem menuItem_share = menu.findItem(R.id.menu_share);
// Get the provider and hold onto it to set/change the share intent.
ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem_share
.getActionProvider();
mShareActionProvider.setShareIntent(getDefaultShareIntent());
getDefaultShareInten方法为
private Intent getDefaultShareIntent() {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "小清新短信闪");
intent.putExtra(Intent.EXTRA_TEXT, "小清新短信闪 1.0");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
xml为
<item
android:id="@+id/menu_share"
android:actionProviderClass="android.widget.ShareActionProvider"
android:enabled="true"
android:showAsAction="ifRoom"
android:title="分享"/>
<item
android:id="@+id/menu_collapse"
android:actionLayout="@layout/collapsibleview"
android:icon="@drawable/arro_down"
android:showAsAction="ifRoom|collapseActionView"
android:title="拓展"/>
never:永远不会显示。只会在溢出列表中显示。ifRoom:会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。
always:无论是否溢出,总会显示。
withText:Title会显示。
collapseActionView:可拓展的Item。
android:actionLayout="@layout/collapsibleview"
为自定义的一个layout
collapsibleview.xml
</pre><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/colla_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<EditText
android:id="@+id/colla_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
</EditText>
</LinearLayout>
主函数中
// 给可折叠的view上的控件添加事件
LinearLayout viewGroup = (LinearLayout) menu.findItem(
R.id.menu_collapse).getActionView();
Button btnn = (Button) viewGroup.findViewById(R.id.colla_btn);
final EditText editText = (EditText) viewGroup
.findViewById(R.id.colla_edit);
btnn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
editText.getText() + "~", 0).show();
}
});
当折叠的函数 展开或收起的时候也有一个监听 setOnActionExpandListener
MenuItem menuItem = menu.findItem(R.id.menu_collapse);
menuItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"onMenuItemActionExpand", 0).show();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"onMenuItemActionCollapse", 0).show();
return true;
}
});
自定义的事件。这样就可以自定义任何想要的样式了。。
代码http://download.csdn.net/detail/wanghao200906/8182135