`
XiangdongLee
  • 浏览: 86975 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

【攻克Android (16)】Tab标签导航

 
阅读更多
本文围绕以下四个部分展开:

一、Tab
        附   代码补充
二、ListNav
三、SwipeTab
        附   代码补充
四、SwipeView





一、Tab

        进入主界面后,选中“新闻”,显示的是“新闻”页面。



        点击“科技”后,显示“科技”页面。



        点击“游戏”后,显示“游戏”页面。




        1.activity_main.xml 中,写一个帧布局,此帧布局显示时会被 碎片 替换

<FrameLayout 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:id="@+id/container"
             tools:context=".MainActivity">

  <!--
  改 此布局 为 帧布局。
  此帧布局 显示时会被 Fragment 替换。

  由于此帧布局要被替换,因此 给其添加 id:
  android:id="@+id/container"
  -->
</FrameLayout>


        2.创建三个 碎片:NewsFragment & fragment_news.xml,TechFragment & fragment_tech.xml,GameFragment & fragment_game.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"
             tools:context="com.xiangdong.tab.NewsFragment">

  <!-- 可用其他的布局方式,放置其他的控件
  碎片里面的内容,由自己决定。
  -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text="@string/news"/>

</LinearLayout>




<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"
              tools:context="com.xiangdong.tab.TechFragment">

  <!-- 可用其他的布局方式,放置其他的控件
  碎片里面的内容,由自己决定。
  -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text="@string/tech"/>

</LinearLayout>




<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"
              tools:context="com.xiangdong.tab.GameFragment">

  <!-- 可用其他的布局方式,放置其他的控件
  碎片里面的内容,由自己决定。
  -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text="@string/game"/>

</LinearLayout>


        3.声明变量(ActionBar应用栏)。

private ActionBar actionBar;


        4.初始化应用栏。

// 4. 初始化应用栏
        actionBar = this.getActionBar();
        // 4.1 设置应用图标
        actionBar.setDisplayHomeAsUpEnabled(true);  // 允许改 actionBar
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);


        5.设置导航模式。

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


        补充:

        ActionBar.NAVIGATION_MODE_LIST:列表导航模式
        ActionBar.NAVIGATION_MODE_STANDARD:标准导航模式
        ActionBar.NAVIGATION_MODE_TABS:标签导航模式

        6.应用栏(actionBar)上添加标签(tabs)。

actionBar.addTab(actionBar.newTab().
                setText(getString(R.string.news)).setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().
                setText(getString(R.string.tech)).setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().
                setText(getString(R.string.game)).setTabListener(tabListener));


        7.标签导航监听器 (事件)。

private ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        // 选中标题
        @Override
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            switch (tab.getPosition()) {
                // 用 Fragment 替换 帧布局
                case 0:
                    ft.replace(R.id.container, new NewsFragment());
                    break;
                case 1:
                    ft.replace(R.id.container, new TechFragment());
                    break;
                case 2:
                    ft.replace(R.id.container, new GameFragment());
            }
        }

        // 取消选中
        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op 没有操作
        }

        // 再次选中
        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op
        }
    };



        附   代码补充

        (1)strings.xml

<resources>
  <string name="app_name">Tab</string>

  <string name="action_settings">Settings</string>

  <string name="news">新闻</string>
  <string name="tech">科技</string>
  <string name="game">游戏</string>
</resources>


        (2)activity_main.xml

        (3)三个碎片的布局文件

        (4)activity_main.xml

        (5)MainActivity

package com.xiangdong.tab;

import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends Activity {
    // 2. 创建所有的 XxxFragment & fragment_Xxx.xml
    // 3. 声明变量(ActionBar)
    private ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 4. 初始化应用栏
        actionBar = this.getActionBar();
        // 4.1 设置应用图标
        actionBar.setDisplayHomeAsUpEnabled(true);  // 允许改 actionBar
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);
        // 5. 设置导航模式
        // 5.1 ActionBar.NAVIGATION_MODE_LIST 列表导航模式
        // 5.2 ActionBar.NAVIGATION_MODE_STANDARD 标准导航模式
        // 5.3 ActionBar.NAVIGATION_MODE_TABS 选项卡导航模式
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // 6. actionBar 上添加tabs(应用栏上添加选项卡)
        actionBar.addTab(actionBar.newTab().
                setText(getString(R.string.news)).setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().
                setText(getString(R.string.tech)).setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().
                setText(getString(R.string.game)).setTabListener(tabListener));
    }

    // 7.标签导航监听器 (事件)
    private ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        // 选中标题
        @Override
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            switch (tab.getPosition()) {
                // 用 Fragment 替换 帧布局
                case 0:
                    ft.replace(R.id.container, new NewsFragment());
                    break;
                case 1:
                    ft.replace(R.id.container, new TechFragment());
                    break;
                case 2:
                    ft.replace(R.id.container, new GameFragment());
            }
        }

        // 取消选中
        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op 没有操作
        }

        // 再次选中
        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op
        }
    };


    // --------------------------------------------------------------------------
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}



二、ListNav

        进入主界面,点击上面的下拉列表,出现三个列表导航:“新闻”、“科技”和“游戏”:



        当点击“新闻”之后,主界面弹出一段文字:



        当点击“科技”之后,主界面弹出一段文字:



        当点击“游戏”之后,主界面弹出一段文字:



        1. strings.xml 。

<resources>
  <string name="app_name">ListNav</string>

  <string name="action_settings">Settings</string>

  <string-array name="list">
    <item>新闻</item>
    <item>科技</item>
    <item>游戏</item>
  </string-array>
</resources>


        2. MainActivity 。

package com.xiangdong.listnav;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.SpinnerAdapter;
import android.widget.Toast;

// 低于5.0版本,MainActivity 会 extends ActionBarActivity(已过时)。
// 5.0+ 版本,MainActivity extends Activity
public class MainActivity extends Activity {
    private ActionBar actionBar;
    private String[] list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = getResources().getStringArray(R.array.list);

        // 初始化应用栏
        actionBar = this.getActionBar();
        // 设置应用图标
        actionBar.setDisplayHomeAsUpEnabled(true);  // 允许改 actionBar
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);

        // 通过适配器加载指定的文本数据,设置显示方式
        SpinnerAdapter adapter = ArrayAdapter.createFromResource(
                this, R.array.list,
                android.R.layout.simple_spinner_dropdown_item);

        // 设置导航模式:列表导航
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        // 设置列表导航回调
        actionBar.setListNavigationCallbacks(
                adapter,
                new ActionBar.OnNavigationListener() {
                    /**
                     * 选中列表导航项
                     * @param itemPosition 位置
                     * @param itemId ID
                     * @return true 事件已处理完毕
                     */
                    @Override
                    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
                        String text = String.format("List Nav index: %d, %s", itemPosition, list[itemPosition]);
                        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
                        return true;
                    }
                }
        );
    }


    // ------------------------------------------------------------------------------------
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}



三、SwipeTab 滑动标签

        进入主界面后,默认显示的是“新闻”的内容。既可以点击应用栏的不同标签来显示不同页面:“新闻”、“科技”和“游戏”;又可以左右滑动,来显示不同的页面,当滑到最左边或最右边再滑动的时候,就滑动不了了。





        1. strings.xml 中,加入字符串

<resources>
  <string name="app_name">SwipeTab</string>

  <string name="action_settings">Settings</string>

  <string name="news">新闻</string>
  <string name="tech">科技</string>
  <string name="game">游戏</string>
</resources>


        2. 创建三个 碎片:NewsFragment & fragment_news.xml,TechFragment & fragment_tech.xml,GameFragment & fragment_game.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"
             tools:context="com.xiangdong.swipetab.NewsFragment">

  <!-- 可用其他的布局方式,放置其他的控件
  碎片里面的内容,由自己决定。
  -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text="@string/news"/>

</LinearLayout>




<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"
              tools:context="com.xiangdong.swipetab.TechFragment">

  <!-- 可用其他的布局方式,放置其他的控件
  碎片里面的内容,由自己决定。
  -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text="@string/tech"/>

</LinearLayout>




<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"
              tools:context="com.xiangdong.swipetab.GameFragment">

  <!-- 可用其他的布局方式,放置其他的控件
  碎片里面的内容,由自己决定。
  -->
  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:text="@string/game"/>

</LinearLayout>


        3. activity_main.xml :要用 v4支持包 下面的 分页控件。

<android.support.v4.view.ViewPager
    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:id="@+id/pager"
    tools:context=".MainActivity"/>

    <!--
    MainActivity 中要获得此分页控件,因此要写 id。
    -->


        导入v4支持包,解决兼容性的方法:



        4. MainActivity :加载主布局文件(代码自动产生)。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 加载主布局文件
        setContentView(R.layout.activity_main);
    }


        5. MainActivity :默认继承的是 Activity。 修改继承类为v4支持包下面的 FragmentActivity 。

public class MainActivity extends FragmentActivity {}


        6. MainActivity 。声明变量。

private ActionBar actionBar;
    private String[] tabs = new String[3];
    private ViewPager viewPager;
    private TabFragmentAdapter adapter;


        7. MainActivity 初始化变量。

// 初始化应用栏
        actionBar = this.getActionBar();
        // 设置应用图标
        actionBar.setDisplayHomeAsUpEnabled(true);  // 允许改 actionBar
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);

        tabs[0] = getString(R.string.news);
        tabs[1] = getString(R.string.tech);
        tabs[2] = getString(R.string.game);


        8. 创建自定义的 Fragment 适配器类。

private class TabFragmentAdapter extends FragmentPagerAdapter {

        public TabFragmentAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            switch (i) {
                case 0:
                    // 需要兼容低版本: android.support.v4.app.Fragment;
                    return new NewsFragment();
                case 1:
                    return new TechFragment();
                case 2:
                    return new GameFragment();
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return tabs.length;
        }
    }


        9. 创建 ViewPager 适配器。

adapter = new TabFragmentAdapter(this.getSupportFragmentManager());

        // 获得分页控件 (来自activity_main.xml)
        viewPager = (ViewPager) findViewById(R.id.pager);
        // 分页控件 关联 适配器
        viewPager.setAdapter(adapter);


        10. 设置 Pager 改变的监听器 (事件)。

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                // Pager 改变后,选中对应的 Tab 【翻页的时候,上面的Tab也在改变】
                actionBar.setSelectedNavigationItem(i);
            }

            @Override
            public void onPageScrollStateChanged(int i) {
                //
            }
        });


        11. 标签监听事件 【Tab改变的时候,相当于在翻页】。

private ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        // 如果不与翻页发生关系,那么这里面还得写switch。
        // 如果与翻页的适配器关联,因为翻页里面已经写了switch,因此这儿就不用写了。
        // 关联后,点击选项,就相当于翻了页。
        @Override
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            // 点击 Tab, ViewPager 改变选中项
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op
        }

        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op
        }
    };


        12. 设置应用栏导航模式,文本/监听事件。

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (int i = 0; i < tabs.length; i++) {
            actionBar.addTab(actionBar.newTab().setText(tabs[i]).
                    setTabListener(tabListener));
        }
    }



        附   代码补充



        (1)strings.xml

        (2)activity_main.xml

        (3)MainActivity

package com.xiangdong.swipetab;

import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends FragmentActivity {
    // 4. 修改继承类为 FragmentActivity

    // 5. 声明变量
    private ActionBar actionBar;
    private String[] tabs = new String[3];
    private ViewPager viewPager;
    private TabFragmentAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 加载主布局文件
        setContentView(R.layout.activity_main);

        // 6. 初始化变量

        // 初始化应用栏
        actionBar = this.getActionBar();
        // 设置应用图标
        actionBar.setDisplayHomeAsUpEnabled(true);  // 允许改 actionBar
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);

        tabs[0] = getString(R.string.news);
        tabs[1] = getString(R.string.tech);
        tabs[2] = getString(R.string.game);

        // 8.创建 ViewPager 适配器
        adapter = new TabFragmentAdapter(this.getSupportFragmentManager());

        // 获得分页控件 (来自activity_main.xml)
        viewPager = (ViewPager) findViewById(R.id.pager);
        // 分页控件 关联 适配器
        viewPager.setAdapter(adapter);

        // 9. 设置 Pager 改变的监听器 (事件)
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                // Pager 改变后,选中对应的 Tab 【翻页的时候,上面的Tab也在改变】
                actionBar.setSelectedNavigationItem(i);
            }

            @Override
            public void onPageScrollStateChanged(int i) {
                //
            }
        });

        // 11. 设置应用栏导航模式,文本/监听事件
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (int i = 0; i < tabs.length; i++) {
            actionBar.addTab(actionBar.newTab().setText(tabs[i]).
                    setTabListener(tabListener));
        }
    }

    // 7. 创建自定义的 Fragment 适配器类
    private class TabFragmentAdapter extends FragmentPagerAdapter {

        public TabFragmentAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            switch (i) {
                case 0:
                    // 需要兼容低版本: android.support.v4.app.Fragment;
                    return new NewsFragment();
                case 1:
                    return new TechFragment();
                case 2:
                    return new GameFragment();
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return tabs.length;
        }
    }

    // 10. 标签监听事件 【Tab改变的时候,相当于在翻页】
    private ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        // 如果不与翻页发生关系,那么这里面还得写switch。
        // 如果与翻页的适配器关联,因为翻页里面已经写了switch,因此这儿就不用写了。
        // 关联后,点击选项,就相当于翻了页。
        @Override
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            // 点击 Tab, ViewPager 改变选中项
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op
        }

        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // no op
        }
    };

    // ------------------------------------------------------------
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}



四、SwipeView

        进入主界面后,默认显示的是“新闻”页面。向左滑,滑不了了。



        向右滑,显示的是“科技”页面。



        继续向右滑,显示的是“游戏”页面。再向右滑,滑不了了。



        1. strings.xml

<resources>
  <string name="app_name">SwipeView</string>

  <string name="news">新闻</string>
  <string name="tech">科技</string>
  <string name="game">游戏</string>

  <string name="action_settings">Settings</string>
</resources>


        2. 创建三个 碎片:NewsFragment & fragment_news.xml,TechFragment & fragment_tech.xml,GameFragment & fragment_game.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="vertical">

  <!-- 可用其他的布局方式,放置其他的控件-->

  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:text="@string/news"
      android:textAppearance="?android:attr/textAppearanceLarge"/>

</LinearLayout>




<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="vertical"
              tools:context=".TechFragment">

  <!-- 可用其他的布局方式,放置其他的控件-->

  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:text="@string/tech"
      android:textAppearance="?android:attr/textAppearanceLarge"/>

</LinearLayout>




<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="vertical"
              tools:context=".GameFragment">

  <!-- 可用其他的布局方式,放置其他的控件-->

  <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:text="@string/game"
      android:textAppearance="?android:attr/textAppearanceLarge"/>

</LinearLayout>


        3. MainActivity

package com.android.swipeview;

import android.app.ActionBar;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends FragmentActivity {

    private ActionBar actionBar;
    private String[] titles = new String[3];
    private ViewPager viewPager;
    private TabFragmentAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);

        titles[0] = getString(R.string.news);
        titles[1] = getString(R.string.tech);
        titles[2] = getString(R.string.game);

        adapter = new TabFragmentAdapter(getSupportFragmentManager());
        viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(adapter);
    }

    private class TabFragmentAdapter extends FragmentPagerAdapter {

        public TabFragmentAdapter(FragmentManager fm) {
            super(fm);
        }

        // 设置 Page 的标题文字
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }

        @Override
        public Fragment getItem(int i) {
            switch (i) {
                case 0:
                    return new NewsFragment();
                case 1:
                    return new TechFragment();
                case 2:
                    return new GameFragment();
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return titles.length;
        }
    }

    // --------------------------------------------------------------------------
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


  • 大小: 21.2 KB
  • 大小: 21.2 KB
  • 大小: 21.6 KB
  • 大小: 31.3 KB
  • 大小: 24.4 KB
  • 大小: 25.6 KB
  • 大小: 26.7 KB
  • 大小: 23.7 KB
  • 大小: 23.5 KB
  • 大小: 23.8 KB
  • 大小: 14.6 KB
  • 大小: 14.6 KB
  • 大小: 54.2 KB
  • 大小: 30.1 KB
  • 大小: 26.3 KB
  • 大小: 24.7 KB
  • 大小: 13 KB
  • 大小: 11 KB
  • 大小: 8.9 KB
  • 大小: 10.5 KB
  • 大小: 29.5 KB
  • 大小: 25.7 KB
  • 大小: 25.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics