Android技术——视图切换(一)~(四)项目的源代码在:https://github.com/YongYuIT/MeiNv_Liulanqi


1、ActionBar是什么?

android AB分区 同步 安卓ab分区切换_ico

android AB分区 同步 安卓ab分区切换_ide_02

上图(上方一张)指出的区域显示的就是ActionBar,可以看到ActionBar里面的图片就是启动Action的icon(如下图下方一张所示),文字就是启动Action的Label。这两个属性分别是在AndroidManifest文件中的manifest-->application-->activity下的android:icon和android:label设置的。

其实,Android3.0以后默认启动了ActionBar,因此只要在AndroidManifest文件中设置app的目标SDK版本高于11就默认启用了ActionBar。如果希望关闭ActionBar可以在AndroidManifest文件中的manifest-->application下设置app的主题(android:theme)为Xxx.NoAction.Bar

在默认情况下ActionBar的图标就是当前Action的android:icon,标题就是当前Action的android:label。

我们可以在代码(当前Action的长下文中)中通过getActionBar()获得ActionBar的实例(假设为actionBar)。通过actionBar.setIcon(R.drawable.logo);或者actionBar.setLogo(R.drawable.logo);来自主设置ActionBar的图标。通过actionBar.setTitle("这是我自己设置的标题");来自主设置ActionBar的标题。

注意:AndroidManifest文件中的manifest-->application-->activity下的android:icon定义的是启动图标(也就是Android桌面上的图标),android:logo定义的是启动后ActionBar上显示的图标,android:logo缺省的情况下会自动取值于android:icon。

android AB分区 同步 安卓ab分区切换_ico_03

可以使用actionBar.show();和actionBar.hide();来控制ActionBar的可见和隐藏。

2、利用ActionBar实现Tab导航

ActionBar可以在屏幕顶部生成多个Tab项。当用户点击某个Tab项时,系统会根据用户点击时间导航到Tab页面。

利用ActionBar实现Tab导航步骤如下:

step1:调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);方法设置使用Tab导航方式。

step2:调用ActionBar的addTab()方法添加多个Tab项,并为每个Tab项添加事件监听器。

在实际项目中,为了更好地展现Tab导航效果,通常用Fragment充当Tab页面。

下面是利用ActionBar实现Tab导航的例子。

/MeiNv_Liulanqi/res/layout/activity_main.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical" >
</LinearLayout>

/MeiNv_Liulanqi/res/layout/fragment_layout.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" >
    <ImageView
        android:id="@+id/img_meinv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/app_logo" />
</LinearLayout>

/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/MeiNvFragment.java文件:

package com.example.tab_nav;
import android.app.Fragment;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
public class MeiNvFragment extends Fragment
{
    public static int[]  img_ids;
    public static String Fragment_Key = "Fragment_Key";
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View v = inflater.inflate(R.layout.fragment_layout, null);
        ImageView img_meinv = (ImageView) v.findViewById(R.id.img_meinv);
        // 获取创建该Fragment时传入的参数Bundle
        Bundle args = getArguments();
        img_meinv.setImageResource(img_ids[args.getInt(Fragment_Key)]);
        return v;
    }
}

/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/MainActivity.java文件:

package com.example.tab_nav;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取ActionBar实例
        ActionBar bar = this.getActionBar();
        // 设置ActionBar的导航方式为Tab方式
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        // 设置MeiNvFragment的img_ids参数
        MeiNvFragment.img_ids = new int[] { R.drawable.linzhiling,
                R.drawable.liuyan, R.drawable.yangmi };
        // 添加Tab项;设置Tab项的标签;设置Tab项的事件监听器,在事件监听器中新建Fragment并用此Fragment替代原本的布局。
        for (int i = 0; i < MeiNvFragment.img_ids.length; i++)
        {
            Tab t = bar.newTab();
            t.setText("第" + (i + 1) + "个美女");
            t.setTabListener(new MyTabListener());
            bar.addTab(t);
        }
    }
    class MyTabListener implements ActionBar.TabListener
    {
        public void onTabReselected(Tab arg0, FragmentTransaction arg1)
        {
            // TODO Auto-generated method stub
        }
        // 当指定Tab项被选中时激发该方法
        @Override
        public void onTabSelected(Tab arg0, FragmentTransaction arg1)
        {
            // TODO Auto-generated method stub
            MeiNvFragment f = new MeiNvFragment();
            // 向新建的MeiNvFragment传递参数
            Bundle b = new Bundle();
            b.putInt(MeiNvFragment.Fragment_Key, arg0.getPosition());
            f.setArguments(b);
            // 获取FragmentTransaction对象
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            // 使用fragment代替该Activity中的container组件
            ft.replace(R.id.container, f);
            // 提交事务
            ft.commit();
        }
        @Override
        public void onTabUnselected(Tab arg0, FragmentTransaction arg1)
        {
            // TODO Auto-generated method stub
        }
    }
}

实现的效果:

android AB分区 同步 安卓ab分区切换_ico_04