zoukankan      html  css  js  c++  java
  • 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

    学习内容来自“慕课网”

    ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来。效果就是可以拖动内容区域来改变相应的功能图标亮暗

    思路:

    Fragment作为内容区域

    点击功能按钮,想将所有的图标变为暗色图标,再调用相应的Fragment,并使对应的图标变亮

    效果图:

    布局文件部分

    activity_main.xml

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical"
     6      >    
     7     <include layout="@layout/top"/>
     8     
     9     <android.support.v4.view.ViewPager   //这里是关键部分
    10         android:layout_width="fill_parent"
    11         android:layout_height="0dp"
    12         android:layout_weight="1"
    13         android:id="@+id/id_viewpager">
    14         
    15     </android.support.v4.view.ViewPager>
    16     
    17     <include layout="@layout/bottom"/>
    18 </LinearLayout>
    19     
    activity_main

    以下布局文件部分是固定的,和前两种方法用到的是一样的,做过前两种方法的可以直接复制代码

    头部部分:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:background="@drawable/title_bar"
     5     android:layout_height="45dp"
     6     android:gravity="center"
     7     android:orientation="vertical" >
     8     <TextView 
     9         android:layout_height="wrap_content"
    10         android:layout_width="wrap_content"
    11         android:layout_gravity="center"
    12         android:text="微信"
    13         android:textColor="#ffffff"
    14         android:textSize="20sp"
    15         android:textStyle="bold"
    16         
    17         />
    18 
    19 </LinearLayout>
    top.xml

    底部部分

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3     android:layout_width="match_parent"
      4     android:layout_height="55dp"
      5     android:background="@drawable/bottom_bar"
      6     android:orientation="horizontal" >
      7     
      8     <LinearLayout 
      9        android:id="@+id/id_tab_weixin"
     10        android:layout_width="0dp"
     11        android:gravity="center"
     12        android:layout_height="fill_parent"
     13        android:layout_weight="1"
     14        android:orientation="vertical"
     15        >
     16         <ImageButton 
     17            android:id="@+id/id_tab_weixin_image"
     18            android:layout_width="wrap_content"
     19            android:layout_height="wrap_content"
     20            android:src="@drawable/tab_weixin_pressed"
     21            android:clickable="false"
     22            android:background="#00000000"
     23            />
     24         <TextView 
     25             android:layout_width="wrap_content"
     26             android:layout_height="wrap_content"
     27             android:text="微信"
     28             android:textColor="#ffffff"
     29             />
     30     </LinearLayout>
     31     
     32     <LinearLayout 
     33        android:id="@+id/id_tab_add"
     34        android:layout_width="0dp"
     35        android:gravity="center"
     36        android:layout_height="fill_parent"
     37        android:layout_weight="1"
     38        android:orientation="vertical"
     39        >
     40         <ImageButton 
     41            android:id="@+id/id_tab_add_image"
     42            android:layout_width="wrap_content"
     43            android:layout_height="wrap_content"
     44            android:clickable="false"
     45            android:src="@drawable/tab_address_normal"
     46            android:background="#00000000"
     47            />
     48         <TextView 
     49             android:layout_width="wrap_content"
     50             android:layout_height="wrap_content"
     51             android:text="通信录"
     52             android:textColor="#ffffff"
     53             />
     54     </LinearLayout>
     55     
     56    <LinearLayout 
     57        android:id="@+id/id_tab_frd"
     58        android:layout_width="0dp"
     59        android:gravity="center"
     60        android:layout_height="fill_parent"
     61        android:layout_weight="1"
     62        android:orientation="vertical"
     63        >
     64         <ImageButton 
     65            android:id="@+id/id_tab_frd_image"
     66            android:layout_width="wrap_content"
     67            android:clickable="false"
     68            android:layout_height="wrap_content"
     69            android:src="@drawable/tab_find_frd_normal"
     70            android:background="#00000000"
     71            />
     72         <TextView 
     73             android:layout_width="wrap_content"
     74             android:layout_height="wrap_content"
     75             android:text="朋友"
     76             android:textColor="#ffffff"
     77             />
     78     </LinearLayout>
     79     
     80     <LinearLayout 
     81        android:id="@+id/id_tab_set"
     82        android:layout_width="0dp"
     83        android:gravity="center"
     84        android:layout_height="fill_parent"
     85        android:layout_weight="1"
     86        android:orientation="vertical"
     87        >
     88         <ImageButton 
     89            android:id="@+id/id_tab_set_image"
     90            android:layout_width="wrap_content"
     91            android:clickable="false"
     92            android:layout_height="wrap_content"
     93            android:src="@drawable/tab_settings_normal"
     94            android:background="#00000000"
     95            />
     96         <TextView 
     97             android:layout_width="wrap_content"
     98             android:layout_height="wrap_content"
     99             android:text="设置"
    100             android:textColor="#ffffff"
    101             />
    102     </LinearLayout>
    103 </LinearLayout>
    bottom.xml

    四个对应fragment部分的布局文件(相似的,只是用来标识效果的文字不同而已)

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6 
     7     <TextView
     8         android:id="@+id/textView1"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:layout_gravity="center_horizontal"
    12         android:text="微信"       //四个 tab_01,tab_01,tab_03,tab_04只是这里显示的文字不同而已
    13         android:textAppearance="?android:attr/textAppearanceMedium" />
    14 
    15 </LinearLayout>
    tab_01

    .java文件部分:

    主activity

    MainActivity.java

      1 package com.example.tab_three;
      2 
      3 
      4 
      5 import java.util.ArrayList;
      6 import java.util.List;
      7 
      8 import android.os.Bundle;
      9 import android.app.Activity;
     10 import android.support.v4.app.Fragment;
     11 import android.support.v4.app.FragmentActivity;
     12 import android.support.v4.app.FragmentPagerAdapter;
     13 import android.support.v4.view.ViewPager;
     14 import android.support.v4.view.ViewPager.OnPageChangeListener;
     15 import android.view.Menu;
     16 import android.view.View;
     17 import android.view.View.OnClickListener;
     18 import android.view.Window;
     19 import android.widget.ImageButton;
     20 import android.widget.LinearLayout;
     21 
     22 public class MainActivity extends FragmentActivity implements OnClickListener{
     23     private ViewPager mViewPager;
     24     private FragmentPagerAdapter mAdapter; //ViewPager适配器
     25     private List<Fragment> mFragments;
     26     
     27     private LinearLayout mTabWeixin;
     28     private LinearLayout mTabFrd;
     29     private LinearLayout mTabAdd;
     30     private LinearLayout mTabSet;
     31     
     32     private ImageButton mImageWeixin;
     33     private ImageButton mImageFrd;
     34     private ImageButton mImageAdd;
     35     private ImageButton mImageSet;
     36     
     37 
     38     @Override
     39     protected void onCreate(Bundle savedInstanceState) {
     40         super.onCreate(savedInstanceState);
     41         requestWindowFeature(Window.FEATURE_NO_TITLE);
     42         setContentView(R.layout.activity_main);
     43         
     44         initView();
     45         initEvent();
     46         setSelect(0);
     47         
     48     }
     49 
     50 
     51     private void initEvent() {
     52         // TODO Auto-generated method stub
     53         mTabWeixin.setOnClickListener(this);
     54         mTabAdd.setOnClickListener(this);
     55         mTabFrd.setOnClickListener(this);
     56         mTabSet.setOnClickListener(this);
     57     }
     58 
     59 
     60     private void initView() {
     61         // TODO Auto-generated method stub
     62         //初始化
     63         mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
     64         
     65         mTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin);
     66         mTabAdd = (LinearLayout) findViewById(R.id.id_tab_add);
     67         mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);
     68         mTabSet = (LinearLayout) findViewById(R.id.id_tab_set);
     69         
     70         mImageWeixin = (ImageButton) findViewById(R.id.id_tab_weixin_image);
     71         mImageAdd = (ImageButton) findViewById(R.id.id_tab_add_image);
     72         mImageFrd = (ImageButton) findViewById(R.id.id_tab_frd_image);
     73         mImageSet = (ImageButton) findViewById(R.id.id_tab_set_image);
     74         
     75         //数据的初始化
     76         mFragments = new ArrayList<Fragment>();
     77         Fragment mTab_01 = new WeixinFragment();
     78         Fragment mTab_02 = new AddFragment();
     79         Fragment mTab_03 = new FrdFragment();
     80         Fragment mTab_04 = new SetFragment();
     81         
     82         mFragments.add(mTab_01);
     83         mFragments.add(mTab_02);
     84         mFragments.add(mTab_03);
     85         mFragments.add(mTab_04);
     86         
     87         mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())
     88         {
     89             
     90             @Override
     91             public int getCount() {
     92                 // TODO Auto-generated method stub
     93                 //返回数据源的个数
     94                 return mFragments.size();
     95                 
     96             }
     97             
     98             @Override
     99             public Fragment getItem(int arg0) {
    100                 // TODO Auto-generated method stub
    101                 return mFragments.get(arg0);
    102             }
    103         };
    104         
    105         mViewPager.setAdapter(mAdapter);
    106         //监听内容区域的滑动效果
    107         mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    108             
    109             @Override
    110             public void onPageSelected(int arg0) {
    111                 // TODO Auto-generated method stub
    112                 int currentItem  = mViewPager.getCurrentItem();
    113                 resetImage();
    114         switch (currentItem) {
    115         case 0:
    116             mImageWeixin.setImageResource(R.drawable.tab_weixin_pressed);
    117             break;
    118         case 1:
    119             mImageAdd.setImageResource(R.drawable.tab_address_pressed);
    120             break;
    121         case 2:
    122             mImageFrd.setImageResource(R.drawable.tab_find_frd_pressed);
    123             break;
    124     
    125         case 3:
    126             mImageSet.setImageResource(R.drawable.tab_settings_pressed);
    127             break;
    128         default:
    129             break;
    130         }
    131                 
    132             }
    133             
    134             @Override
    135             public void onPageScrolled(int arg0, float arg1, int arg2) {
    136                 // TODO Auto-generated method stub
    137                 
    138             }
    139             
    140             @Override
    141             public void onPageScrollStateChanged(int arg0) {
    142                 // TODO Auto-generated method stub
    143                 
    144             }
    145         });
    146         }
    147 
    148 
    149     @Override
    150     public void onClick(View v) {
    151         // TODO Auto-generated method stub
    152         //先切换图片至暗色
    153                 resetImage();
    154                 switch (v.getId()) {
    155                 case R.id.id_tab_weixin:
    156                     setSelect(0);
    157                     break;
    158                 case R.id.id_tab_add:
    159                     setSelect(1);
    160                     break;
    161                 case R.id.id_tab_frd:
    162                     setSelect(2);
    163                     break;
    164                 case R.id.id_tab_set:
    165                     setSelect(3);
    166                     break;
    167 
    168                 default:
    169                     break;
    170                 }
    171     }
    172     private void setSelect(int i) {
    173         // TODO Auto-generated method stub
    174         //设置将点击的那个功能图标为亮色
    175         //切换内容区域
    176         resetImage();
    177         switch (i) {
    178         case 0:
    179             mImageWeixin.setImageResource(R.drawable.tab_weixin_pressed);
    180             break;
    181         case 1:
    182             mImageAdd.setImageResource(R.drawable.tab_address_pressed);
    183             break;
    184         case 2:
    185             mImageFrd.setImageResource(R.drawable.tab_find_frd_pressed);
    186             break;
    187     
    188         case 3:
    189             mImageSet.setImageResource(R.drawable.tab_settings_pressed);
    190             break;
    191         default:
    192             break;
    193         }
    194         mViewPager.setCurrentItem(i);
    195         
    196     }
    197 
    198 
    199         //将所有功能图标的界面设为暗色
    200         private void resetImage() {
    201             // TODO Auto-generated method stub
    202             mImageWeixin.setImageResource(R.drawable.tab_weixin_normal);
    203             mImageAdd.setImageResource(R.drawable.tab_address_normal);
    204             mImageFrd.setImageResource(R.drawable.tab_find_frd_normal);
    205             mImageSet.setImageResource(R.drawable.tab_settings_normal);
    206             
    207         }
    208 
    209     
    210 }
    MainActivity

    四个相似的.java文件

    WeixinFragment.java

     1 package com.example.tab_three;
     2 
     3 import android.os.Bundle;
     4 import android.support.v4.app.Fragment;
     5 import android.view.LayoutInflater;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 
     9 public class WeixinFragment extends Fragment{
    10     
    11     @Override
    12     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    13             Bundle savedInstanceState) {
    14         // TODO Auto-generated method stub
    15     
    16         
    17         return inflater.inflate(R.layout.tab_1, container,false);
    18     }
    19 }
    WeixinFragment.java

    SetFragment.java

     1 package com.example.tab_three;
     2 
     3 import android.os.Bundle;
     4 import android.support.v4.app.Fragment;
     5 import android.view.LayoutInflater;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 
     9 public class SetFragment extends Fragment{
    10     
    11     @Override
    12     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    13             Bundle savedInstanceState) {
    14         // TODO Auto-generated method stub
    15     
    16         
    17         return inflater.inflate(R.layout.tab_4, container,false);
    18     }
    19 }
    SetFragment.java

    FrdFragment.java

     1 package com.example.tab_three;
     2 
     3 import android.os.Bundle;
     4 import android.support.v4.app.Fragment;
     5 import android.view.LayoutInflater;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 
     9 public class FrdFragment extends Fragment{
    10     @Override
    11     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    12             Bundle savedInstanceState) {
    13         // TODO Auto-generated method stub
    14         return inflater.inflate(R.layout.tab_3, container,false);
    15     }
    16 
    17 }
    FrdFragment.xml

    AddFragment.java

     1 package com.example.tab_three;
     2 
     3 import android.os.Bundle;
     4 import android.support.v4.app.Fragment;
     5 import android.view.LayoutInflater;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 
     9 public class AddFragment extends Fragment{
    10     
    11     @Override
    12     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    13             Bundle savedInstanceState) {
    14         // TODO Auto-generated method stub
    15     
    16         
    17         return inflater.inflate(R.layout.tab_2, container,false);
    18     }
    19 }
    AddFragment.xml
  • 相关阅读:
    winsock编程WSAAsyncSelect模型
    winsock编程select模型
    socket编程,简单多线程服务端测试程序
    模板singleton模式的C++实现
    windows socket函数详解
    ACE_Message_Block消息数据类
    ACE Socket Wrapper Facade
    ACE_Event_Handler:事件响应入口
    ACE_Time_Value
    华为ICDcomm接口js测试
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4335122.html
Copyright © 2011-2022 走看看