剖析ActionBar的基本用法

从Android3.0(API 11)开始,Action bar被包含在所有的使用Theme.Hole主题的Activity
当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" >

这样,在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>
<style name="AcBar_titleStyle">
        <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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值