以下内容基于android4.0以上版本.
1.actionbar有无的设置
actionbar一般在建android项目时都默认有actionbar的,要在manifest.xml中的application标签中指定一个主题即可,如android:theme=”@style/AppTheme” ;如果不显示actionbar,有2种方法:
(1)在manifest.xml中的application标签中修改为android:theme=”@android:style/Theme.Holo.NoActionBar”
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo.actionbar"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light.NoActionBar" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
(2)在mainactivity.java中用java代码动态修改
private ActionBar actionBar;
actionBar=getActionBar();
actionBar.hide();
public class MainActivity extends Activity {
private ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar=getActionBar();
actionBar.hide();
}
}
2.actionbar区域划分
分为3个部分,home区域,title区域和menu区域
标号1处是home局域,4是title区域,2,3为menu区域
3.home区
我们先来讨论home区域:
在开发过程中我们主要用来显示一个logo或者附带返回功能;在这里我们可以用代码来设置这个区域是否显示;
默认情况下是有的,
在mainactivity.java中用代码:actionBar.setDisplayShowHomeEnabled(false);则不显示logo
要替换图标的话,有2中方法:
1.在manifest里,application下的标签 android:icon=”@drawable/改为替换的图标”;如我的项目 android:icon=”@drawable/icon01”;
这种修改不仅仅修改了actionbar上home区域的icon,还修改了app的桌面图标
2.在MainActivity.java中代码修改actionBar.setIcon(R.drawable.icon01);
或者actionBar.setLogo(R.drawable.icon01);
在这里setIcon与setLogo区别在与:setIcon的图标必须是方方正正的,而setLogo没这要求,并且setLogo和setIcon同时出现时,系统只会选择setLogo的图标.
修改前:
修改后:
在home区域里还有一个就是,可以设置返回,回退功能,
在MainActivity.java中:
actionBar.setDisplayHomeAsUpEnabled(true);//系统默认是false
则在logo左边出现一个返回的箭头,点击那箭头图标,具有回退功能
4.title区
设置有无:
actionBar.setDisplayShowTitleEnabled(false);//默认是true;
title分主title和副title;
actionBar.setSubtitle(“hello World”);
actionBar.setTitle(“we are ready”);
那么我们能否改变title的文字样式呢,答案是可以的,不过相对比较复杂,我们需要修改项目中res/values/styles.xml文件
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppBaseTheme" parent="android:Theme.Light">
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/mstyle</item>
</style>
<style name="mstyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:titleTextStyle">@style/mActionBarTitle</item>
</style>
<style name="mActionBarTitle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">
<!-- 修改字体大小 -->
<item name="android:textSize">25sp</item>
<!--修改字体颜色 -->
<item name="android:textColor">@android:color/holo_blue_bright</item>
<!--修改字体风格 -->
<item name="android:textStyle">italic</item>
</style>
</resources>
效果图如下:
5.menu区
如果要显示menu,必须在MainActivity.java中写入如下代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
在项目中,系统是默认用一个独立的xml文件来配置menu的控件的,路径是res/menu/mian.xml,在这文件里面,我们用item便签来建立menu的元素,每个标签代表一个menu的成员,一个item中一般要有id,showAsAction,title
例如下面的item:
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
如果要显示图标的话,需要加入 android:icon属性
用一个例子来说明一些关键属性;
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.demo.actionbar.MainActivity" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="always"
android:title="settings"/>
<item
android:id="@+id/action_search"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/logo_search"
android:title="搜索"/>
<item
android:id="@+id/action_more"
android:orderInCategory="100"
android:showAsAction="never"
android:icon="@drawable/logo_plus"
android:title="更多"/>
</menu>
效果图:
首先,showAsAction这个属性确定了item元素怎样显示;
有3中选择:
(1)always就在menu区显示出来,如果设置了Icon,则显示图标,没有设置icon,显示文字title;
(2)ifRoom,当menu空间足够放置是,就会显示,不够位置空间,就放入overflow中,就是放入最右侧图标中(可以理解为一个装东西的文件盒)
(3)never,就是放入overflow中,只有当点击overflow图标时,放入的item已问题title按列表形式显示出来
而item属性中android:orderInCategory主要用来确定从左到右排开的顺序(如果处在overflow中就是从上到下的顺序),数值越小,越靠左(上);
修改menu中title的文字格式,修改这格式需要在文件res/values/styles.xml中修改
<style name="AppBaseTheme" parent="android:Theme.Light">
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/mstyle</item>
<item name="android:actionMenuTextAppearance">@style/mMenuStyle</item>
<!--修改menutitle的文字颜色 -->
<item name="android:actionMenuTextColor">@android:color/holo_red_dark</item>
</style>
<style name="mstyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:titleTextStyle">@style/mActionBarTitle</item>
</style>
<style name="mActionBarTitle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">
<!-- 修改字体大小 -->
<item name="android:textSize">25sp</item>
<!--修改字体颜色 -->
<item name="android:textColor">@android:color/holo_blue_bright</item>
<!--修改字体风格 -->
<item name="android:textStyle">italic</item>
</style>
<style name="mMenuStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">
<!--修改menutitle的大小和字体风格 -->
<item name="android:textSize">8sp</item>
<item name="android:textStyle">bold</item>
</style>
效果图:
最后一点就是,如何改变overflow图标呢,并且点击overflow既可以显示图标又可以显示文字的列表呢,
应用嵌套就可以做到,即在item中嵌套menu;
代码如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.demo.actionbar.MainActivity" >
<item
android:id="@+id/action_more"
android:icon="@drawable/logo_plus"
android:orderInCategory="100"
android:showAsAction="always"
android:title="更多">
<menu>
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_launcher"
android:orderInCategory="300"
android:showAsAction="never"
android:title="设置"/>
<item
android:id="@+id/action_search"
android:icon="@drawable/logo_search"
android:orderInCategory="200"
android:showAsAction="never"
android:title="搜索"/>
</menu>
</item>
</menu>
-------------------------------------------------end----