安卓项目开发实战(1)续--首页顶部菜单用actionbar实现

经过了两个晚上的研究,终于可以实现简单的actionbar了。在这期间,我发现大部分讲解actionbar的文章都是基于4.0以上版本的,对于低版本使用actionbar没有详细的讲解,经过长时间搜索发现了以下两个比较好的文章:

http://www.cnblogs.com/tianzhijiexian/p/3871416.html

http://blog.csdn.net/xyz_lmn/article/details/12623609

经过我一番实践发现要在3.0以下版本实现actionbar还真要费一番周折,下面来具体说下低版本使用actionbar的步骤

1、先要添加4.0支持

(1)项目右键 --> import --> Android --> Existing Android Code Into workspace
        --> 选择..\sdk\extras\android\support\v7\appcompat(根据自己的文件存放路径先择)
        --> 勾选copy projects into workspace --> finish
          (若出现unable to resolve target ‘android-16‘, 修改project.properties)
(2)在项目中引用android.support.v7
       项目右键 --> properties --> Android --> Library --> Add --> OK

2、修改系统主题

(1)AndroidManifest.xml中application节点中android:theme="@style/AppBaseTheme" 属性对应的值修改 ctrl+鼠标左键进入values/styles.xml修改

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
(2)同时values11/styles.xml对应的主题也要修改

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
第一个是给2.3.3以及以下版本用的,第二个是给4.0及以上版本用的。。

下面的操作基本上和http://www.cnblogs.com/tianzhijiexian/p/3871416.html差不多了

3、给actionbar添加menuitem

新建/res/menu/menuitem.xml内容如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.liuc.ui.activity.MainActivity" >
   
    
    <!-- 自定义的视图菜单 只显示图标 -->
    <item
        android:id="@+id/clock_item_id"
        app:actionLayout="@layout/actionbar_useritem"
        app:showAsAction="always"/>	 
</menu>

对应的res/layout/actionbar_item.xml的内容为

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="5dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:src="@drawable/header"
    
    >
</ImageView>

这里有一点需要注意:

* 官方推荐每一个item项都要有icon和title图标,因为系统默认显示的是图标,
* 而且当屏幕空间不够的时候,未显示的菜单就会隐藏到列表中,而列表中只能显示title字段的值。
    <item
        android:id="@+id/clock_item_id"
        android:showAsAction="withText"
        android:title="clock"
        app:actionLayout="@layout/clock"
        app:showAsAction="always"/>
这里需要特别注意的是,文件要有自己的命名空间。而且设置showAsAction或actionLayout时需要用自定义命名空间中的属性,否则无效!

这里自定 的命名空间语句为:

xmlns:app="http://schemas.android.com/apk/res-auto"

activity加载菜单的代码为:

package com.liuc.ui.activity;


import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;

import com.liuc.R;
/**
 * 星座程序入口
 * @author liuchao
 *
 */
public class MainActivity extends ActionBarActivity{
	private ActionBar actionBar;

	protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
       
        actionBar = getSupportActionBar();//初始化ActionBar
        actionBar.setDisplayHomeAsUpEnabled(true);//显示左边的小箭头
        actionBar.setDisplayShowHomeEnabled(true);//显示home图片

//        actionBar.setIcon(getResources().getDrawable(R.drawable.ic_launcher));//设置左边的图标
        actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.bar_color));//设置背景图

		
    }  
	
	
	@Override  
	   public boolean onCreateOptionsMenu(Menu menu) {  
	       MenuInflater inflater = getMenuInflater();  
	       inflater.inflate(R.menu.mainmenu, menu);  
	       return super.onCreateOptionsMenu(menu);  
	   }  

	



}

这样一个简单的actionbar效果就完成了。。

代码地址:http://download.csdn.net/detail/shanhuhau/7954799

效果图如下:



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。