Android studio-Actionbar的使用实践

本文详细介绍了Android Studio中Action Bar的使用,包括其作用、如何在项目中启用和禁用、修改图标和标题,以及如何添加导航图标实现界面切换。同时,还提到了通过设置主题实现窗口切换的滑动动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为ActionBar的使用实践,部分内容参考 http://blog.youkuaiyun.com/guolin_blog/article/details/18234477


1.actionbar

在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等功能。使用ActionBar的好处是,它可以给提供一种全局统一的UI界面,使得用户在使用任何一款软件时都懂得该如何操作,并且ActionBar还可以自动适应各种不同大小的屏幕。由于Action Bar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的话则需要引入Support Library,不过3.0之前版本的市场占有率已经非常小了,这里简单起见我们就不再考虑去做向下兼容,而是只考虑4.0以上版本的用法。

2.在androidstudio中使用actionbar

默认程序都是使用了actionbar的,是在AndroidManifest.xml中指定了Application或Activity的theme,theme的定义是在style.xml里如下

<resources>

    <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

如果不想使用actionbar,可以使用一个没有actionbar的主题,也可以将actionbar隐藏

3.修改actionbar的图标和标题

默认情况下,actionbar的图标和标题都是在manifests中定义的,可以通过修改这两个字段来满足目的

android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"



3. 添加按钮
ActionBar还可以根据应用程序当前的功能来提供与其相关的Action按钮,这些按钮都会以图标或文字的形式直接显示在ActionBar上。当然,如果按钮过多,ActionBar上显示不完,多出的一些按钮可以隐藏在overflow里面(最右边的三个点就是overflow按钮),点击一下overflow按钮就可以看到全部的Action按钮了。

当Activity启动的时候,系统会调用Activity的onCreateOptionsMenu()方法来取出所有的Action按钮,我们只需要在这个方法中去加载一个menu资源,并把所有的Action按钮都定义在资源文件里面就可以了。
在res新建一个menu文件如下,注意图标太大可能无法显示
 
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.example.actionbartest.MainActivity" >

    <item
        android:id="@+id/action_1"
        android:icon="@mipmap/item1"
        app:showAsAction="ifRoom"
        android:title="item1"/>
    <item
        android:id="@+id/action_2"
        android:icon="@mipmap/item1"
        app:showAsAction="ifRoom"
        android:title="item2"/>
    <item
        android:id="@+id/action_settings"
        android:icon="@mipmap/item1"
        app:showAsAction="never"
        android:title="setting"/>

</menu>
可以看到,这里我们通过三个<item>标签定义了三个Action按钮。<item>标签中又有一些属性,其中id是该Action按钮的唯一标识符,icon用于指定该按钮的图标,title用于指定该按钮可能显示的文字(在图标能显示的情况下,通常不会显示文字),showAsAction则指定了该按钮显示的位置,主要有以下几种值可选:always表示永远显示在ActionBar中,如果屏幕空间不够则无法显示,ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow中,never则表示永远显示在overflow中。如果继承自AppCompatActivity 需要使用app:showAsAction,继承自Activity 需要使用android:showAsAction
 
接着,重写Activity的onCreateOptionsMenu()方法,代码如下所示:
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    return super.onCreateOptionsMenu(menu);
}

这里我们注意到,显示在ActionBar上的按钮都只有一个图标而已,我们在title中指定的文字并没有显示出来。没错,title中的内容通常情况下只会在overflow中显示出来,ActionBar中由于屏幕空间有限,默认是不会显示title内容的。但是出于以下几种因素考虑,即使title中的内容无法显示出来,我们也应该给每个item中都指定一个title属性:
?当ActionBar中的剩余空间不足的时候,如果Action按钮指定的showAsAction属性是ifRoom的话,该Action按钮就会出现在overflow当中,此时就只有title能够显示了。
?如果Action按钮在ActionBar中显示,用户可能通过长按该Action按钮的方式来查看到title的内容。

4.acntion按钮的响应事件
当用户点击Action按钮的时候,系统会调用Activity的onOptionsItemSelected()方法,通过方法传入的MenuItem参数,我们可以调用它的getItemId()方法和menu资源中的id进行比较,从而辨别出用户点击的是哪一个Action按钮,比如:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 switch (item.getItemId()) {
 case R.id.action1:
  //添加处理代码
  return true;
 case R.id.action2:
  //添加处理代码
  return true;
 case R.id.action_settings:
 //添加处理代码

}

5.添加导航图标,实现界面间的切换

启用ActionBar图标导航的功能,可以允许用户根据当前应用的位置来在不同界面之间切换。比如,A界面展示了一个列表,点击某一项之后进入了B界面,这时B界面就应该启用ActionBar图标导航功能,这样就可以回到A界面。我们可以通过调用setDisplayHomeAsUpEnabled()方法来启用ActionBar图标导航功能。导航按钮的功能是回到主界面,这个和back按钮不同.

界面的间的切换实现的步骤如下

1. 创建一MainActivity,对应activity_main.xml

2. 创建一个AboutActivity,对应AboutActivity.xml

3. 在MainActivity里,添加按钮,按钮监听事件处理代码如下:

Intent intent=new Intent(MainActivity.this,AboutActivity.class);
startActivity(intent);

启动一个新的activity

3.在AboutAcivity里,启用导航图标

setDisplayHomeAsUpEnabled(true);


6。实现窗口切换的滑入动画

1)在manifests里使用theme

android:theme="@style/ActivityStyle"

2)在style.xml里定义theme

<style name="AnimationActivity" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>
    <item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
    <item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
    <item name="android:activityCloseExitAnimation">@anim/push_right_out</item>
</style>

<style name="ActivityStyle" parent="@style/AppTheme">
    <item name="android:screenOrientation">portrait</item>
    <item name="android:windowAnimationStyle">@style/AnimationActivity</item>
</style>

3)具体实现

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>


<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
</set>


<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>


<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
</set>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值