您的位置:首页 > 移动开发 > Android开发

Android studio-Actionbar的使用实践

2017-01-09 10:56 330 查看
本文为ActionBar的使用实践,部分内容参考http://blog.csdn.net/guolin_blog/article/details/182344771.actionbar在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等功能。使用ActionBar的好处是,它可以给提供一种全局统一的UI界面,使得用户在使用任何一款软件时都懂得该如何操作,并且ActionBar还可以自动适应各种不同大小的屏幕。由于Action Bar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的话则需要引入SupportLibrary,不过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" ><itemandroid:id="@+id/action_1"android:icon="@mipmap/item1"app:showAsAction="ifRoom"android:title="item1"/><itemandroid:id="@+id/action_2"android:icon="@mipmap/item1"app:showAsAction="ifRoom"android:title="item2"/><itemandroid: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按钮,比如:@Overridepublic 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.xml2. 创建一个AboutActivity,对应AboutActivity.xml3. 在MainActivity里,添加按钮,按钮监听事件处理代码如下:
Intent intent=new Intent(MainActivity.this,AboutActivity.class);startActivity(intent);
启动一个新的activity3.在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"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="300"android:fromXDelta="100%p"android:toXDelta="0" /></set>
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="300"android:fromXDelta="0"android:toXDelta="-100%p" /></set>
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="300"android:fromXDelta="-100%p"android:toXDelta="0" /></set>
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="300"android:fromXDelta="0"android:toXDelta="100%p" /></set>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: