从Android3.0(API 11)开始,Action bar被包含在所有的使用Theme.Hole主题的Activity
当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值是,这个主题是默认的主题一
在AndroidManifest.xml中
代码中设置能够像微信一样显示icon图像的。
当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值是,这个主题是默认的主题一
现在写一个这样的ActionBar:
首先修改res/values-v14/styles.xml文件:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
<!-- API 14 theme customizations can go here. -->
<item name="android:actionBarStyle">@style/my_actionbar_style</item>
<item name="android:actionBarItemBackground">@drawable/bg_green</item>
<item name="android:itemBackground">@drawable/red_white</item>
<item name="android:actionOverflowButtonStyle">@style/Overbtnstyle</item>
</style>
<style name="Overbtnstyle" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:background">@drawable/redbg</item>
</style>
<style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#ffd60cfa</item>
<item name="android:titleTextStyle">@style/AcBar_titleStyle</item>
</style>
<style name="AcBar_titleStyle">
<item name="android:textColor">@color/white</item>
<item name="android:textSize">18sp</item>
</style>
</resources>
在AndroidManifest.xml中
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
这样,在values/styles.xml中
<style name="AppTheme" parent="AppBaseTheme">
这个时候就调用到了res/values-v14/styles.xml文件中的主题了。
在代码中做一些ActionBar的相应等处理:
public class MainActivity extends Activity {
private TextView text;
private Button button1;
private String tag = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
text.setText(tag);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(),
ChildActivityA.class));
}
});
// #显示返回箭头
// getActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
// ActionBar.DISPLAY_HOME_AS_UP);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 当ActionBar图标被点击时调用,默认不会响应
Toast.makeText(this, "点击了Home按钮", Toast.LENGTH_SHORT).show();
System.out.println("点击了Home按钮!");
break;
case R.id.menu_light:
Toast.makeText(this, "点击的灯光", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
setOverflowIconVisible(featureId, menu);
return super.onMenuOpened(featureId, menu);
}
/**
* 在onMenuOpened()中调用,用于在菜单中显示icon
*/
public void setOverflowIconVisible(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
}
}
代码中设置能够像微信一样显示icon图像的。
对上面的一些样式做一下说明:
没有溢出的菜单的点击背景
<item name="android:actionBarItemBackground">@drawable/bg_green</item>
溢出的菜单的点击背景
<item name="android:itemBackground">@drawable/red_white</item>
更多按键的点击背景(点击这个按键弹出溢出菜单列表)
<item name="android:actionOverflowButtonStyle">@style/Overbtnstyle</item>
<style name="Overbtnstyle" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:background">@drawable/redbg</item>
</style>
整条ActionBar的背景,以及标题字的样式
<item name="android:actionBarStyle">@style/my_actionbar_style</item>
<style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#ffd60cfa</item>
<item name="android:titleTextStyle">@style/AcBar_titleStyle</item>
</style>
<item name="android:actionBarItemBackground">@drawable/bg_green</item>
溢出的菜单的点击背景
<item name="android:itemBackground">@drawable/red_white</item>
更多按键的点击背景(点击这个按键弹出溢出菜单列表)
<item name="android:actionOverflowButtonStyle">@style/Overbtnstyle</item>
<style name="Overbtnstyle" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:background">@drawable/redbg</item>
</style>
整条ActionBar的背景,以及标题字的样式
<item name="android:actionBarStyle">@style/my_actionbar_style</item>
<style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#ffd60cfa</item>
<item name="android:titleTextStyle">@style/AcBar_titleStyle</item>
</style>
<style name="AcBar_titleStyle">
<item name="android:textColor">@color/white</item>
<item name="android:textSize">18sp</item>
</style>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">18sp</item>
</style>
关于标题字体样式AcBar_titleStyle的标签不能直接写入my_actionbar_style中,必须设置为android:titleTextStyle的样式
至于显示返回箭头,代码中已经说明了,就是
getActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
ActionBar.DISPLAY_HOME_AS_UP);
参考:
http://blog.csdn.net/xyz_lmn/article/details/8132420
http://8988940.blog.51cto.com/8978940/1551581
demo下载http://pan.baidu.com/s/1qWnviLe
本文来自CSDN博客 转载请联系作者
注明出处http://blog.csdn.net/dreamintheworld/article/details/39288381