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

Android 系列 6.5控制操作栏

2017-01-11 09:13 267 查看
6.5控制操作栏

问题

操作栏是大多数现代Android应用程序的重要组成部分。你需要知道如何创建,配置和,当必要时,隐藏操作栏。



在布局中使用工具栏或较旧的ActionBar,并使用XML和代码的混合来控制操作栏的功能。

讨论

操作栏在Android Honeycomb(3.0,API 11)中引入,作为大多数正常应用程序的标准组件。没有操作栏的应用程序的一个常见用例是全屏应用程序,如相机,照片显示/编辑或视频游戏。
操作栏包含一个大约为屏幕垂直大小5%的全宽矩形,左侧有一个图标和程序名称,一个“溢出菜单”图标(替换旧版Android硬件上显示的硬菜单按钮)右侧(垂直行中的三个点),以及可选地在溢出菜单的左侧的动作。典型的布局如图6-2所示。

Figure 6-2。操作栏一般布局

有几种方法来获取ActionBar。假设您定位现代版本(4.0及更高版本),您将自动拥有一个操作栏,除非您提供的应用程序主题不是直接或间接从Holo主题派生。这将由“标准”android.app.ActionBar类实现。这个的一个缺点是,自从ActionBar引入(Android 3.0)和现代版本(如Android 7.0)之后,一些功能已经添加,因此你可能调用存在于现代版本的方法,但不会存在于用户的设备(如果它们运行的​​是旧版本)。这当然会结束了。

因此,当前的建议是使用“v7 appcompat”库。现在这个库实际上提供了两个不同的ActionBar实现,即appcompat ActionBar和推荐的appcompat ToolBar类。 ToolBar比操作栏更通用,可以在不同的地方使用,虽然我们只会考虑在这里使用它作为一个操作栏。

因此,您的操作栏的建议步骤如下:

1.确保包含v7 appcompat;该库的API 24的坐标是com.android.support:appcompat-v7:24.1.1

2.使您的活动扩展AppCompatActivity,而不是活动

3.在AndroidManifest.xml中,将<application>元素设置为使用NoActionBar主题,以便不会添加本机ActionBar(两个操作栏不会很好地共存)。

4.在布局文件中,使用android.support.v7.widget.Toolbar(如

示例6-5),并将其放置在布局的顶部,使其看起来像一个标准的动作栏。

5.在您的Activity启动代码中,使用setCompatActionBar()将此工具栏设置为操作栏。

示例6-5是由Android Studio生成的带有工具栏的布局文件:

实施例6-5。 XML布局使用兼容工具栏作为操作栏

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.androidcookbook.actionbarcompat.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:padding="5dp"/>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
CoordinatorLayout是appcompat库的一部分,并且需要在其直接子节点上使用app:layout_behavior属性;没有它,它们被忽略。

示例6-6是此示例应用程序的活动代码。

实施例6-6。兼容工具栏的活动代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
...
}
一旦你创建了你的操作栏,你可以通过各种方式控制它。要使您的操作栏消失或重新出现,您可以使用

getCompatActionBar().hide()

getCompatActionBar().show()

事实上,任何标准的appcompat ActionBar方法都可以使用。 getCompatActionBar()方法不直接返回工具栏,而是将其包装在ToolbarActionBar中,顾名思义,它提供了所有的ActionBar方法。

在这个食谱的第一段,我们提到“溢出菜单”,而不解释。传统的Android选项菜单出现以响应“菜单按钮”,但是现代Android设备不需要具有用于此目的的物理按钮。相反,操作栏右侧的三个点(见图6-2)调出菜单。但是 - 这是操作栏的原始用途之一 - 您可以从活动的菜单中“推广”菜单项到操作栏!所有你需要做的是在menu.xml文件中添加showAsAction属性。

此属性可以取值never(默认值),ifRoom(其值为明显)和always(这也是显而易见的,但不建议使用它;您应该使用ifRoom优先于最后一个选项)。

这是一个添加到默认菜单文件的帮助菜单项
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.androidcookbook.actionbarcompat.MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"
/>
<item
android:id="@+id/action_help"
android:title="Help"
app:showAsAction="ifRoom"
/>
</menu>
这将产生如图6-3所示的布局。

图6-3。操作栏与菜单项

与其他菜单项一样,您可以使用文本,图标或两者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息