使用ActionBar Tab

使用ActionBar Tab(地址)

本文实现将页面分为多个选项卡,并在每一个选项卡中显示一个ListView。

创建新Layout - ActionbarTab.axml, 并向页面中添加FrameLayout控件。 页面源代码如下:

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:minWidth="25px"
      android:minHeight="25px">
      <FrameLayout
          android:minWidth="25px"
          android:minHeight="25px"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:id="@+id/frameLayout1" />
  </LinearLayout>

创建新Layout - ListViewLayout.axml, 这个Layout用于定义嵌在Frame - frameLayout1中的ListView控件。 在页面中添加ListView控件 - Id是myList。页面源代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/myList" />
</LinearLayout>

向项目中添加新Activity - ActionbarTabActivity.cs, 在Activity中实现新Tab的创建。

  1. Oncreate()方法中,关联前端UI.

    SetContentView(Resource.Layout.ActionbarTab);
    
  2. 设置页面导航模式为Tabs.
    this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
    
  3. 定义新AddTab方法, 将新创建的Fragment View添加到页面控件frameLayout1中。
    void AddTab(string tabText, int iconResourceId, Fragment view)
    {
        var tab = this.ActionBar.NewTab();
        tab.SetText(tabText);
        tab.SetIcon(iconResourceId);
    
        tab.TabSelected += delegate (object sender, ActionBar.TabEventArgs e)
        {
            var fragment = this.FragmentManager.FindFragmentById(Resource.Id.frameLayout1);
            if (fragment != null)
                e.FragmentTransaction.Remove(fragment);
            e.FragmentTransaction.Add(Resource.Id.frameLayout1, view);
        };
        tab.TabUnselected += delegate (object sender, ActionBar.TabEventArgs e)
        {
            e.FragmentTransaction.Remove(view);
        };
    
        this.ActionBar.AddTab(tab);
    }
    
  4. 定义两个新Fragment类(此处仅demo一个),继承基类Fragment。Fragment类似于子Activity, 这两个Fragment的作用是操作两个Tab页面中的控件。
    public class firstFragment:Fragment
    {
        List<string> Sources = null;
    
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            base.OnCreateView(inflater, container, savedInstanceState);
            var view = inflater.Inflate(Resource.Layout.ListViewlayout, container, false);
            ListView myList = view.FindViewById<ListView>(Resource.Id.myList);
    
            Sources = new List<string>();
            for(int i = 1; i<=10;i++)
            {
                Sources.Add(string.Format(@"item {0}", i));
            }
            ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity,
            global::Android.Resource.Layout.SimpleListItem1, Sources);
            myList.SetAdapter(adapter);
            myList.ItemClick += ListClick;
        }
    
        void ListClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            ListView list = sender as ListView;
            string selectedFromList = list.GetItemAtPosition(e.Position).ToString();
        }
    }
    

    以上代码中需要注意, ArrayAdapter的第一参数在Fragment中是this.Activity, 而在Activity中是thisFindViewById()修改为view.FindViewById()

  5. 添加新Tab.
    AddTab("list1", Resource.Drawable.Icon, new firstFragment());
    

ActionbarTabActivity 源代码如下:

[Activity(Label = "ActionbarTabActivity")]
public class ActionbarTabActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Create your application here
        SetContentView(Resource.Layout.ActionbarTab);
        this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

        AddTab("list1", Resource.Drawable.Icon, new firstFragment());
        if(bundle!=null)
            this.ActionBar.SelectTab(this.ActionBar.GetTabAt(bundle.GetInt("tab")));
    }
    protected override void OnSaveInstanceState(Bundle outState)
    {
        outState.PutInt("tab", this.ActionBar.SelectedNavigationIndex);
        base.OnSaveInstanceState(outState);
    }
    void AddTab(string tabText, int iconResourceId, Fragment view)
    {
        var tab = this.ActionBar.NewTab();
        tab.SetText(tabText);
        tab.SetIcon(iconResourceId);

        tab.TabSelected += delegate (object sender, ActionBar.TabEventArgs e)
        {
            var fragment = this.FragmentManager.FindFragmentById(Resource.Id.frameLayout1);
            if (fragment != null)
                e.FragmentTransaction.Remove(fragment);
            e.FragmentTransaction.Add(Resource.Id.frameLayout1, view);
        };
        tab.TabUnselected += delegate (object sender, ActionBar.TabEventArgs e)
        {
            e.FragmentTransaction.Remove(view);
        };

        this.ActionBar.AddTab(tab);

    }

    public class firstFragment:Fragment
    {
        List<string> Sources = null;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            base.OnCreateView(inflater, container, savedInstanceState);
            var view = inflater.Inflate(Resource.Layout.ListViewlayout, container, false);
            ListView myList = view.FindViewById<ListView>(Resource.Id.myList);

            Sources = new List<string>();
            for(int i = 1; i<=10;i++)
            {
                Sources.Add(string.Format(@"item {0}", i));
            }
            ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity,
     global::Android.Resource.Layout.SimpleListItem1, Sources);
            myList.SetAdapter(adapter);
            myList.ItemClick += ListClick;

            return view;
        }

        void ListClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            ListView list = sender as ListView;
            string selectedFromList = list.GetItemAtPosition(e.Position).ToString();
        }
    }
}

时间: 2024-10-12 20:00:16

使用ActionBar Tab的相关文章

Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个layout 什么layout都可以 加个Id 叫container package com.example.demoforactionbar; import android.app.ActionBar; import android.app.Activity; import android.app.

更改android actionbar tab文字颜色

1 在res/values/colors.xml <color name="text_tab_selected">#000000</color> <color name="text_tab_unselected">#886C2A</color> 2 /res/color 定义文件 tab.xml <?xml version="1.0" encoding="utf-8"?&g

Android 原生 Android ActionBar Tab (滑动)导航

本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab 导航. 另外,个人觉得,通过本例能够知道,如何创建初始化 Fragment,并把 Fragment 放入"容器"中.容器既可以是 LinearLayout.RelativeLayout,也可以是 ViewGroup.这类似初始化 Web 应用程序页面的实现,困扰了我很久,不解决这个问题,

Android 自定义ActionBar.Tab对象的表现

 最近想修改ActionBar.Tab对象的文本字体和颜色 发现该对象提供的接口非常有限 而网上搜索关于ActionBar.Tab结果大多比较早 使用的也不是google提供的例子中的ActionBar 于是自己研究了一天 找到了使用接口setCustomView来自定义ActionBar.Tab对象 先通过ActionBar.getTabAt(int) 获得一个ActionBar.Tab对象 然后调用setCustomView 使用自定义的layout 注意这里没有生产layout的对象 

Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航

一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见ActionBar还是比较强大的,关键要深入进去.灵活的运用,下面我们就使用ActionBar实现如图所示的效果: 二.本例特点 1.  兼容低版本 2. 使用ActionBar 分体设计(split) 3. Tab使用自定义View 4. 结合ViewPager实现滑动导航 三.代码讲解: 1.在项目中加入

actionbar tab 字体大小设置

在styles.xml文件中添加下面的样式即可 <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarTabTextStyle">@style/TabTextStyle</item> </style> <style name=&qu

actionbar tab字体颜色

In fact it is pretty easy.All you should do is defining an attribute like this <style name="tabtextcolor" parent="@style/Widget.Sherlock.ActionBar.TabText"> <item name="android:textColor">@android:color/white</

使用ActionBar实现Tab导航

为了使用ActionBar实现Tab导航,按如下步骤进行即可. 1.调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)方法设置使用Tab导航方式. 2.调用ActionBar的addTab方法添加多个Tab标签,并为每个Tab标签添加事件监听. Fragment相当于activity片段,通常使用单独的activity组合多个fragment,这样既可以在一个activity创建多个用户界面,又可以让多个activity复用

【Android界面实现】使用ActionBar和DrawerLayout纯原生控件,实现侧滑栏和滑动Tab界面

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的文章中,我们使用第三方开源控件,比如说是SlidingMenu和PagerSlidingTabStrip,实现过侧滑栏和滑动Tab界面.但是在support-v4包中,提供了原生的侧滑栏控件DrawerLayout,而滑动的Tab效果,我们可以使用ViewPager和ActionBar上的Tab来进行实现.所以在今天的文章里面,我们将介绍如何将DrawerLayout与ActionBar进行整合,