android开发--actionbar的初阶

以下内容基于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值