《Android平板电脑开发秘籍》——3.8节技巧:创建一个Tab页式的ActionBar

简介:

本节书摘来自异步社区《Android平板电脑开发秘籍》一书中的第3章,第3.8节技巧:创建一个Tab页式的ActionBar,作者 【印度】B.M. Harwani,更多章节内容可以访问云栖社区“异步社区”公众号查看

3.8 技巧:创建一个Tab页式的ActionBar
Android平板电脑开发秘籍
Tab页式的ActionBar类似于自定义事件处理方法的按钮,它被设计成与Fragment Manager一起使用。为了在ActionBar中显示导航Tab页,请调用setNavigationMode()方法,把值ActionBar.NAVIGATION_MODE_TABS作为参数传入,如下所示:

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

指定了导航模式后,通过调用ActionBar 的addTab()方法可以添加Tab页,如下所示:

actionBar.addTab(actionBar.newTab().setText("Create").setTabListener(this));

以上代码新建了一个Tab页,把它的标题设为“Create”,给它绑定了一个TabListener,最后把新建的Tab页添加到ActionBar中去。例如,这里用setText()方法设置了Tab页的标题。可以调用setIcon()方法来为Tab页定义一个图标。你还可以调用setContentDescription()方法设置Tab页的更多细节信息。

示例:

Tab tab1 = actionBar.newTab();
tabOne.setText("Create")
.setIcon(R.drawable.ic_launcher)
.setContentDescription("Creating the Invoice")
.setTabListener(this));
actionBar.addTab(tab1);

这段代码给ActionBar添加了一个Tab页面,标题为“Create”。与此Tab页关联的图标是默认图标ic_launcher,详细的描述信息是“Creating the Invoice”。当点击Tab页时,事件由TabListener进行处理,完成所需的任务。

现在将通过一个实际的例子来了解Tab页式ActionBar的概念。请创建一个名为的ActionBarTabApp Android项目。在这个应用程序中,将新建两个Tab页:Create和Update。当选中一个Tab页时,对应的Fragment将会被激活,并显示一段文字信息表示该Fragment被激活了。两个Fragment的View将会通过单独的XML Layout文件显示。因此请在res/layout文件夹下分别添加两个名为createfragment.xml和updatefragment.xml的XML文件。

请在createfragment.xml中写入代码清单3-11给出的代码。

代码清单3-11 写入createfragment.xml文件的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/create_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=" This is Create Fragment "
        android:textSize="@dimen/text_size"
        android:textStyle="bold" />
</LinearLayout>

可以看到,上述Layout文件定义了一个TextView,初始时显示文字“This is Create Fragment”。显示此信息即表示第一个Fragment被激活了。类似地,在updatefragment.xml文件中写入代码清单3-12给出的代码。

代码清单3-12 写入updatefragment.xml文件的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/update_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=" This is Update Fragment "
        android:textSize="@dimen/text_size"
        android:textStyle="bold" />
</LinearLayout>

同样,在Layout文件中为第二个Fragemt定义了一个TextView控件。此TextView初始时显示文字“This is Update Fragment”,表示第二个Fragemt被激活了。

为了在选中Action Tab页时能够显示相应Fragemt的内容,需要在Activity Layout文件中定义一个Fragemt容器。因此,在Activity Layout文件activity_action_bar_tab_app.xml中写入代码清单3-13所示的代码。

代码清单3-13 写入Activity Layout文件activity_action_bar_tab_app.xml的代码

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <LinearLayout
        android:id="@+id/fragment_container"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</LinearLayout>

为了载入两个Fragment的View,请在Android项目的包com.androidtablet.action bartabapp中添加两个Java类文件:CreateActivity.java和UpdateActivity.java。

为了从Layout文件createfragment.xml中载入View,请把代码清单3-14给出的代码写入CreateActivity.java文件。

代码清单3-14 写入CreateActivity.java文件的代码

package com.androidtablet.actionbartabapp;
import android.app.Fragment;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.os.Bundle;
public class CreateActivity extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        return inflater.inflate(R.layout.createfragment,
            container, false);
    }
}

同样,为了从Layout文件updatefragment.xml载入View,请把代码清单3-15给出的代码写入UpdateActivity.java文件。

代码清单3-15 写入UpdateActivity.java文件的代码

package com.androidtablet.actionbartabapp;
import android.app.Fragment;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.os.Bundle;
public class UpdateActivity extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup
        container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.updatefragment, container, false);
    }
}

接下来,需要在主Activity文件ActionBarTabAppActivity.java中写入一些Java代码,以完成以下任务。

在应用程序中定义两个Tab页:Create和Update。
定义Tab页侦听器并与两个Tab页关联。
当相应的Tab页被点击时,激活Fragment Create和Update。
为了完成上述所有任务,把代码清单3-16所给出的代码写入Java Activity文件ActionBarTab AppActivity.java中。

代码清单3-16 写入Java Activity文件ActionBarTabAppActivity.java的代码

package com.androidtablet.actionbartabapp;
import android.os.Bundle;
import android.app.Activity;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.util.Log;
import android.app.FragmentManager;
import android.app.Fragment;
public class ActionBarTabAppActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_action_bar_tab_app);
        Fragment createFragment = new CreateActivity();
        Fragment updateFragment = new UpdateActivity();
        ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_
            MODE_TABS);
        actionBar.setDisplayShowTitleEnabled(true);
        ActionBar.Tab CreateTab = actionBar.newTab().
            setText("Create");
        ActionBar.Tab UpdateTab = actionBar.newTab().
            setText("Update");
        CreateTab.setTabListener(new MyTabsListener(
            createFragment));
        UpdateTab.setTabListener(new MyTabsListener(updateFragment));
        actionBar.addTab(CreateTab);
        actionBar.addTab(UpdateTab);
    }
    protected class MyTabsListener implements ActionBar.
        TabListener {
        Fragment fragment;
        public MyTabsListener(Fragment fragment){
            this.fragment = fragment;
        }
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            ft.replace(R.id.fragment_container, fragment, null);
        }
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            ft.remove(fragment);
            getFragmentManager().popBackStack(null,
                FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
        Log.d("Tab", String.valueOf(tab.getPosition()) +
            " re-selected");
        }
    }
}

可以看到,调用getActionBar()方法创建了ActionBar对象。为了让ActionBar以 Tab页的方式显示,把它的导航模式设成了ActionBar.NAVIGATION_MODE_TABS。可以在setDisplayShowTitleEnabled()方法传入布尔值False,来隐藏Activity的标题。然后,创建两个标签为Create和Update的Tab页,并添加到ActionBar中。

事件侦听器TabListener与两个Tab页都关联。不管选中哪一个Tab页,onTabSelected()方法都会被调用,并打开预设的Fragment。onTabSelected()方法激活相应的Fragment,把定义于Layout文件的View显示出来。当Tab页被选中时,onTabUnselected ()方法也会被调用,那些没有被选中的Tab页将作为参数传入。与未选中Tab页关联的Fragment将会从堆栈中移除,这些Fragment变为不可见。

onTabUnselected ()方法将显示未选中Tab页的位置1。运行此应用程序后,你将看到Tab页式ActionBar显示了两个Tab页:Create和Update。当你选择Create页后,与之相关联的Fragment将会被激活,显示出一条信息“This is Create Fragment”,如图3-8上所示。类似地,在选择Update页后,与之关联的Fragment将会被激活,显示出文字信息“This is Update Fragment”,如图3-8下所示。


4af5726d5689e83cee563966eb444b3d38bcff4e
相关文章
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
12天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
14天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
19 1
Android开发之使用OpenGL实现翻书动画
|
14天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
12 1
Android开发之OpenGL的画笔工具GL10
|
21天前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
12 0
|
21天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
27天前
|
Java Android开发
Android开发系列全套课程
本系列课程面向有java基础,想进入企业从事android开发的计算机专业者。学习搭配实战案例,高效掌握岗位知识。
18 1
|
29天前
|
数据可视化 测试技术 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【2月更文挑战第30天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五个关键的UI设计技巧,这些技巧旨在提升用户体验并优化性能。我们将深入分析布局优化、资源管理、动画效果、响应式设计和测试流程等方面,并提供实用的代码示例和最佳实践,帮助开发者构建既美观又高效的安卓应用。
|
29天前
|
监控 算法 Android开发
安卓应用开发中的内存优化策略
【2月更文挑战第30天】随着移动设备性能的不断提升,用户对应用程序的体验要求越来越高。在安卓应用开发中,内存管理是影响应用性能和用户体验的关键因素之一。本文将探讨针对安卓平台的内存优化技巧,包括避免内存泄漏、合理使用数据结构和算法、优化图片资源处理等策略,旨在帮助开发者提升应用性能和稳定性。
19 1
|
30天前
|
编解码 测试技术 Android开发
安卓应用开发:构建高效用户界面的实用指南
【2月更文挑战第29天】在移动应用开发的世界中,创建一个流畅、直观且响应迅速的用户界面(UI)对于吸引和保持用户至关重要。本篇文章旨在向安卓开发者展示如何通过优化布局设计、使用现代UI框架以及利用Android Studio提供的工具来构建高效的用户界面。我们将深入探讨如何减少内存消耗、提升渲染性能,并确保应用在不同设备和屏幕尺寸上的兼容性。跟随本文的指导,你将能够提高应用的整体用户体验,从而在竞争激烈的市场中脱颖而出。