android开发--actionbar的初阶

来源:互联网 发布:淘宝买家怎么删除追评 编辑:程序博客网 时间:2024/06/05 16:43
以下内容基于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区域
actionbar区域划分

标号1处是home局域,4是title区域,2,3为menu区域
3.home区
我们先来讨论home区域:
在开发过程中我们主要用来显示一个logo或者附带返回功能;在这里我们可以用代码来设置这个区域是否显示;
默认情况下是有的,
有logo
在mainactivity.java中用代码:actionBar.setDisplayShowHomeEnabled(false);则不显示logo
无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;
notitle
title分主title和副title;
actionBar.setSubtitle(“hello World”);
actionBar.setTitle(“we are ready”);
title
那么我们能否改变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>

效果图如下:
changeTitleStyle

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>

效果图:
menu
首先,showAsAction这个属性确定了item元素怎样显示;
有3中选择:
(1)always就在menu区显示出来,如果设置了Icon,则显示图标,没有设置icon,显示文字title;
(2)ifRoom,当menu空间足够放置是,就会显示,不够位置空间,就放入overflow中,就是放入最右侧图标中(可以理解为一个装东西的文件盒)
(3)never,就是放入overflow中,只有当点击overflow图标时,放入的item已问题title按列表形式显示出来
overflow
而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>

效果图:
menutitle

最后一点就是,如何改变overflow图标呢,并且点击overflow既可以显示图标又可以显示文字的列表呢,
qiantao

应用嵌套就可以做到,即在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----
0 0
原创粉丝点击