介绍

  1. 常见的应用框架
  2. 框架一:多个tab+Fragment,点击不同的tab加载不同的Fragment,不能滑动切换只能点击切换;
  3. 框架二:多个tab+ViewPager+FragmentPagerAdapter,点击不同的tab加载ViewPager对应的item,可以滑动切换,经过改进,可以实现"强制刷新"
    框架三:多个tab+ViewPager+FragmentPagerAdapter+SlidingMenu,左右滑菜单
  4. 其他:
  5. 上有标题栏,标题栏可以是在FragmentViewPager中的(如QQ,每个页面的标题栏都不一样)或者和tab同级(如微信,所有页面的标题栏都一样)。

  6.  

框架一,MainActivity

  1. public class MainActivity extends Activity implements OnClickListener {
  2.     /**
  3.      * 四个TextView控件
  4.      */
  5.     private TextView[] mTabTVs = new TextView[4];
  6.     /**
  7.      * 四个控件【未】按下时的图片id
  8.      */
  9.     private int[] mTabTVIdsNormal;
  10.     /**
  11.      * 四个控件按下时的图片id
  12.      */
  13.     private int[] mTabTVIdsPress;
  14.     @Override
  15.     protected void onCreate(Bundle savedInstanceState) {
  16.         super.onCreate(savedInstanceState);
  17.         setContentView(R.layout.main);
  18.         initViews();
  19.         setTabSelection(mTabTVs[0]);
  20.     }
  21.     private void initViews() {
  22.         mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
  23.         mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
  24.         mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
  25.         mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
  26.         mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
  27.                 R.drawable.tab_settings_normal };
  28.         mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
  29.                 R.drawable.tab_settings_pressed };
  30.         //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
  31.         for (int i = 0; i < mTabTVs.length; i++) {
  32.             mTabTVs[i].setOnClickListener(this);
  33.             mTabTVs[i].setTag(i);
  34.         }
  35.     }
  36.     @Override
  37.     public void onClick(View v) {
  38.         switch (v.getId()) {
  39.         case R.id.tv_tab_bottom_weixin:
  40.         case R.id.tv_tab_bottom_friend:
  41.         case R.id.tv_tab_bottom_contact:
  42.         case R.id.tv_tab_bottom_setting:
  43.             setTabSelection(v);
  44.             break;
  45.         default:
  46.             break;
  47.         }
  48.     }
  49.     private void setTabSelection(View v) {
  50.         //清除掉所有的选中状态
  51.         for (int i = 0; i < mTabTVs.length; i++) {
  52.             mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);
  53.             mTabTVs[i].setSelected(false);
  54.         }
  55.         // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
  56.         int index = (Integer) v.getTag();
  57.         ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);
  58.         v.setSelected(true);
  59.         FragmentTransaction transaction = getFragmentManager().beginTransaction();
  60.         switch (index) {
  61.         case 0:
  62.             transaction.replace(R.id.id_content, new MainTabFragment());//每次都必须通过new的方式创建Fragment,不然可能出问题
  63.             break;
  64.         case 1:
  65.             transaction.replace(R.id.id_content, new MainTabFragment());
  66.             break;
  67.         case 2:
  68.             transaction.replace(R.id.id_content, new MainTabFragment());
  69.             break;
  70.         case 3:
  71.             transaction.replace(R.id.id_content, new MainTabFragment());
  72.             break;
  73.         }
  74.         transaction.commit();
  75.     }
  76. }
  77.  

框架一,布局

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     android:orientation="vertical" >
  5.     <TextView
  6.         android:layout_width="fill_parent"
  7.         android:layout_height="45dp"
  8.         android:background="@drawable/title_bar"
  9.         android:gravity="center"
  10.         android:text="微信"
  11.         android:textColor="#fff"
  12.         android:textSize="20sp"
  13.         android:textStyle="bold" />
  14.     <FrameLayout
  15.         android:id="@+id/id_content"
  16.         android:layout_width="match_parent"
  17.         android:layout_height="0dp"
  18.         android:layout_weight="2016" />
  19.     <LinearLayout
  20.         android:id="@+id/ly_main_tab_bottom"
  21.         android:layout_width="fill_parent"
  22.         android:layout_height="55dp"
  23.         android:background="@drawable/bottom_bar" >
  24.         <TextView
  25.             android:id="@+id/tv_tab_bottom_weixin"
  26.             android:layout_width="0dp"
  27.             android:layout_height="fill_parent"
  28.             android:layout_weight="1"
  29.             android:drawableTop="@drawable/tab_weixin_normal"
  30.             android:gravity="center"
  31.             android:text="微信"
  32.             android:textColor="@drawable/text_color_sel" />
  33.         <TextView
  34.             android:id="@+id/tv_tab_bottom_friend"
  35.             android:layout_width="0dp"
  36.             android:layout_height="fill_parent"
  37.             android:layout_weight="1"
  38.             android:drawableTop="@drawable/tab_find_frd_normal"
  39.             android:gravity="center"
  40.             android:text="朋友"
  41.             android:textColor="@drawable/text_color_sel" />
  42.         <TextView
  43.             android:id="@+id/tv_tab_bottom_contact"
  44.             android:layout_width="0dp"
  45.             android:layout_height="fill_parent"
  46.             android:layout_weight="1"
  47.             android:drawableTop="@drawable/tab_address_normal"
  48.             android:gravity="center"
  49.             android:text="通讯录"
  50.             android:textColor="@drawable/text_color_sel" />
  51.         <TextView
  52.             android:id="@+id/tv_tab_bottom_setting"
  53.             android:layout_width="0dp"
  54.             android:layout_height="fill_parent"
  55.             android:layout_weight="1"
  56.             android:drawableTop="@drawable/tab_settings_normal"
  57.             android:gravity="center"
  58.             android:text="设置"
  59.             android:textColor="@drawable/text_color_sel" />
  60.     </LinearLayout>
  61. </LinearLayout>
  62.  

框架一,fragment

  1. public class MainTabFragment extends Fragment {
  2.     @Override
  3.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  4.         View view = inflater.inflate(R.layout.main_tab_01, container, false);
  5.         TextView tv = (TextView) view.findViewById(R.id.tv);
  6.         tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date()));
  7.         return view;
  8.     }
  9. }

  10. <?xml version="1.0" encoding="utf-8"?>
  11. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  12.     android:layout_width="fill_parent"
  13.     android:layout_height="fill_parent"
  14.     android:background="#fcfcfc"
  15.     android:orientation="vertical" >
  16.     <TextView
  17.         android:id="@+id/tv"
  18.         android:layout_width="fill_parent"
  19.         android:layout_height="fill_parent"
  20.         android:background="#88cc"
  21.         android:gravity="center"
  22.         android:text="第一个页面"
  23.         android:textColor="#000"
  24.         android:textSize="30sp" />
  25. </LinearLayout>  
  26.  

框架二,MainActivity

  1. /**
  2.  * 使用support.v4.app中的Fragment,继承自FragmentActivity
  3.  * 没办法,使用FragmentPagerAdapter就不可以用app的Fragment,只能用v4的Fragment
  4.  * 有个问题:viewpage响应的条目会因为自己的缓存机制导致不更新页面
  5.  * @author 白乾涛
  6.  */
  7. public class MainActivity2 extends FragmentActivity implements OnClickListener {
  8.     private ViewPager mViewPager;
  9.     private FragmentPagerAdapter mPagerAdapter;
  10.     private List<Fragment> mFragments = new ArrayList<Fragment>();
  11.     /**
  12.      * 四个TextView控件
  13.      */
  14.     private TextView[] mTabTVs = new TextView[4];
  15.     /**
  16.      * 四个控件【未】按下时的图片id
  17.      */
  18.     private int[] mTabTVIdsNormal;
  19.     /**
  20.      * 四个控件按下时的图片id
  21.      */
  22.     private int[] mTabTVIdsPress;
  23.     @Override
  24.     protected void onCreate(Bundle savedInstanceState) {
  25.         super.onCreate(savedInstanceState);
  26.         setContentView(R.layout.main2);
  27.         initViews();
  28.         initViewPage();
  29.         setTabSelection(mTabTVs[0]);
  30.     }
  31.     private void initViews() {
  32.         mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
  33.         mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
  34.         mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
  35.         mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
  36.         mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
  37.                 R.drawable.tab_settings_normal };
  38.         mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
  39.                 R.drawable.tab_settings_pressed };
  40.         //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
  41.         for (int i = 0; i < mTabTVs.length; i++) {
  42.             mTabTVs[i].setOnClickListener(this);
  43.             mTabTVs[i].setTag(i);
  44.         }
  45.     }
  46.     private void initViewPage() {
  47.         mFragments.add(new MainTabFragment2());
  48.         mFragments.add(new MainTabFragment2());
  49.         mFragments.add(new MainTabFragment2());
  50.         mFragments.add(new MainTabFragment2());
  51.         mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
  52.             @Override
  53.             public int getCount() {
  54.                 return mFragments.size();
  55.             }
  56.             @Override
  57.             public Fragment getItem(int arg0) {
  58.                 return mFragments.get(arg0);
  59.             }
  60.         };
  61.         mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
  62.         mViewPager.setAdapter(mPagerAdapter);
  63.         mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
  64.             @Override
  65.             public void onPageSelected(int position) {
  66.                 setTabSelection(mTabTVs[position]);
  67.             }
  68.             @Override
  69.             public void onPageScrollStateChanged(int arg0) {
  70.             }
  71.             @Override
  72.             public void onPageScrolled(int arg0, float arg1, int arg2) {
  73.             }
  74.         });
  75.     }
  76.     @Override
  77.     /**
  78.      *当下面tab的状态改变时,更改ViewPager选中项
  79.      */
  80.     public void onClick(View v) {
  81.         switch (v.getId()) {
  82.         case R.id.tv_tab_bottom_weixin:
  83.         case R.id.tv_tab_bottom_friend:
  84.         case R.id.tv_tab_bottom_contact:
  85.         case R.id.tv_tab_bottom_setting:
  86.             setTabSelection(v);
  87.             mViewPager.setCurrentItem((Integer) v.getTag());
  88.             break;
  89.         default:
  90.             break;
  91.         }
  92.     }
  93.     /**
  94.      *当ViewPager选中项改变时,更改下面tab的状态
  95.      */
  96.     private void setTabSelection(View v) {
  97.         //清除掉所有的选中状态
  98.         for (int i = 0; i < mTabTVs.length; i++) {
  99.             mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);
  100.             mTabTVs[i].setSelected(false);
  101.         }
  102.         // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
  103.         int index = (Integer) v.getTag();
  104.         ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);
  105.         v.setSelected(true);
  106.     }
  107. }
  108.  

框架二,布局

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:layout_width="match_parent"
  3.     android:layout_height="match_parent"
  4.     android:orientation="vertical" >
  5.     <TextView
  6.         android:layout_width="fill_parent"
  7.         android:layout_height="45dp"
  8.         android:background="@drawable/title_bar"
  9.         android:gravity="center"
  10.         android:text="微信"
  11.         android:textColor="#fff"
  12.         android:textSize="20sp"
  13.         android:textStyle="bold" />
  14.     <android.support.v4.view.ViewPager
  15.         android:id="@+id/id_viewpager"
  16.         android:layout_width="fill_parent"
  17.         android:layout_height="0dp"
  18.         android:layout_weight="2016" />
  19.     <LinearLayout
  20.         android:id="@+id/ly_main_tab_bottom"
  21.         android:layout_width="fill_parent"
  22.         android:layout_height="55dp"
  23.         android:background="@drawable/bottom_bar" >
  24.         <TextView
  25.             android:id="@+id/tv_tab_bottom_weixin"
  26.             android:layout_width="0dp"
  27.             android:layout_height="fill_parent"
  28.             android:layout_weight="1"
  29.             android:drawableTop="@drawable/tab_weixin_normal"
  30.             android:gravity="center"
  31.             android:text="微信"
  32.             android:textColor="@drawable/text_color_sel" />
  33.         <TextView
  34.             android:id="@+id/tv_tab_bottom_friend"
  35.             android:layout_width="0dp"
  36.             android:layout_height="fill_parent"
  37.             android:layout_weight="1"
  38.             android:drawableTop="@drawable/tab_find_frd_normal"
  39.             android:gravity="center"
  40.             android:text="朋友"
  41.             android:textColor="@drawable/text_color_sel" />
  42.         <TextView
  43.             android:id="@+id/tv_tab_bottom_contact"
  44.             android:layout_width="0dp"
  45.             android:layout_height="fill_parent"
  46.             android:layout_weight="1"
  47.             android:drawableTop="@drawable/tab_address_normal"
  48.             android:gravity="center"
  49.             android:text="通讯录"
  50.             android:textColor="@drawable/text_color_sel" />
  51.         <TextView
  52.             android:id="@+id/tv_tab_bottom_setting"
  53.             android:layout_width="0dp"
  54.             android:layout_height="fill_parent"
  55.             android:layout_weight="1"
  56.             android:drawableTop="@drawable/tab_settings_normal"
  57.             android:gravity="center"
  58.             android:text="设置"
  59.             android:textColor="@drawable/text_color_sel" />
  60.     </LinearLayout>
  61. </LinearLayout>
  62.  

框架二,fragment

  1. /**
  2.  * 使用support.v4.app中的Fragment
  3.  * @author 白乾涛
  4.  */
  5. public class MainTabFragment2 extends Fragment {
  6.     @Override
  7.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  8.         View view = inflater.inflate(R.layout.main_tab_01, container, false);
  9.         TextView tv = (TextView) view.findViewById(R.id.tv);
  10.         tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date()));
  11.         return view;
  12.     }
  13. }
  14.  

框架3,MainActivity

  1. /**
  2.  * 只能用v4的Fragment
  3.  * @author 白乾涛
  4.  */
  5. public class MainActivity3 extends SlidingFragmentActivity implements OnClickListener {
  6.     private ViewPager mViewPager;
  7.     private FragmentPagerAdapter mPagerAdapter;
  8.     private List<Fragment> mFragments = new ArrayList<Fragment>();
  9.     private ImageView iv_menu_left;
  10.     private ImageView iv_menu_right;
  11.     /**
  12.      * 四个TextView控件
  13.      */
  14.     private TextView[] mTabTVs = new TextView[4];
  15.     /**
  16.      * 四个控件【未】按下时的图片id
  17.      */
  18.     private int[] mTabTVIdsNormal;
  19.     /**
  20.      * 四个控件按下时的图片id
  21.      */
  22.     private int[] mTabTVIdsPress;
  23.     @Override
  24.     public void onCreate(Bundle savedInstanceState) {
  25.         super.onCreate(savedInstanceState);
  26.         requestWindowFeature(Window.FEATURE_NO_TITLE);
  27.         setContentView(R.layout.main3);
  28.         initViews();
  29.         initMenu();
  30.         initViewPage();
  31.         setTabSelection(mTabTVs[0]);
  32.     }
  33.     private void initViews() {
  34.         mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
  35.         mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
  36.         mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
  37.         mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
  38.         mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
  39.                 R.drawable.tab_settings_normal };
  40.         mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
  41.                 R.drawable.tab_settings_pressed };
  42.         //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
  43.         for (int i = 0; i < mTabTVs.length; i++) {
  44.             mTabTVs[i].setOnClickListener(this);
  45.             mTabTVs[i].setTag(i);
  46.         }
  47.         //点击弹出左右侧滑菜单
  48.         iv_menu_left = (ImageView) findViewById(R.id.iv_menu_left);
  49.         iv_menu_right = (ImageView) findViewById(R.id.iv_menu_right);
  50.         iv_menu_left.setOnClickListener(this);
  51.         iv_menu_right.setOnClickListener(this);
  52.     }
  53.     private void initMenu() {
  54.         SlidingMenu menu = getSlidingMenu();
  55.         //两侧通用设置
  56.         menu.setMode(SlidingMenu.LEFT_RIGHT);
  57.         menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
  58.         menu.setShadowWidthRes(R.dimen.shadow_width);
  59.         menu.setShadowDrawable(R.drawable.shadow);
  60.         menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
  61.         menu.setFadeDegree(0.35f);
  62.         //左侧的菜单
  63.         setBehindContentView(R.layout.menu_left);//左右侧不能使用同一个布局,并且replace掉的控件的ID不能相同!不知道为什么会有这种情况!
  64.         Fragment leftMenuFragment = new MainTabFragment2("左侧的");
  65.         getSupportFragmentManager().beginTransaction().replace(R.id.menu_left, leftMenuFragment).commit();
  66.         //右侧菜单设置
  67.         menu.setSecondaryShadowDrawable(R.drawable.shadow);//根据资源文件ID来设置右边(二级)滑动菜单的阴影效果
  68.         menu.setSecondaryMenu(R.layout.menu_right);//设置右边侧滑菜单
  69.         Fragment rightMenuFragment = new MainTabFragment2("右侧的");
  70.         getSupportFragmentManager().beginTransaction().replace(R.id.menu_right, rightMenuFragment).commit();
  71.     }
  72.     private void initViewPage() {
  73.         mFragments.add(new MainTabFragment2("第1个"));
  74.         mFragments.add(new MainTabFragment2("第2个"));
  75.         mFragments.add(new MainTabFragment2("第3个"));
  76.         mFragments.add(new MainTabFragment2("第4个"));
  77.         mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
  78.             @Override
  79.             public int getCount() {
  80.                 return mFragments.size();
  81.             }
  82.             @Override
  83.             public Fragment getItem(int arg0) {
  84.                 return mFragments.get(arg0);
  85.             }
  86.         };
  87.         mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
  88.         mViewPager.setAdapter(mPagerAdapter);
  89.         mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
  90.             @Override
  91.             public void onPageSelected(int position) {
  92.                 setTabSelection(mTabTVs[position]);
  93.             }
  94.             @Override
  95.             public void onPageScrollStateChanged(int arg0) {
  96.             }
  97.             @Override
  98.             public void onPageScrolled(int arg0, float arg1, int arg2) {
  99.             }
  100.         });
  101.     }
  102.     @Override
  103.     /**
  104.      *当下面tab的状态改变时,更改ViewPager选中项
  105.      */
  106.     public void onClick(View v) {
  107.         switch (v.getId()) {
  108.         case R.id.tv_tab_bottom_weixin:
  109.         case R.id.tv_tab_bottom_friend:
  110.         case R.id.tv_tab_bottom_contact:
  111.         case R.id.tv_tab_bottom_setting:
  112.             setTabSelection(v);
  113.             mViewPager.setCurrentItem((Integer) v.getTag());
  114.             break;
  115.         case R.id.iv_menu_left:
  116.             getSlidingMenu().showMenu();
  117.             break;
  118.         case R.id.iv_menu_right:
  119.             getSlidingMenu().showSecondaryMenu();
  120.             break;
  121.         default:
  122.             break;
  123.         }
  124.     }
  125.     /**
  126.      *当ViewPager选中项改变时,更改下面tab的状态
  127.      */
  128.     private void setTabSelection(View v) {
  129.         //清除掉所有的选中状态
  130.         for (int i = 0; i < mTabTVs.length; i++) {
  131.             mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null);
  132.             mTabTVs[i].setSelected(false);
  133.         }
  134.         // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
  135.         int index = (Integer) v.getTag();
  136.         ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null);
  137.         v.setSelected(true);
  138.     }
  139. }
  140.  

框架3,布局

  1. main3.xml
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:tools="http://schemas.android.com/tools"
  4.     android:layout_width="match_parent"
  5.     android:layout_height="match_parent"
  6.     android:orientation="vertical" >
  7.     <LinearLayout
  8.         android:layout_width="fill_parent"
  9.         android:layout_height="45dp"
  10.         android:background="@drawable/title_bar"
  11.         android:orientation="horizontal" >
  12.         <ImageView
  13.             android:id="@+id/iv_menu_left"
  14.             android:layout_width="wrap_content"
  15.             android:layout_height="wrap_content"
  16.             android:layout_gravity="center_vertical"
  17.             android:layout_marginLeft="3dp"
  18.             android:src="@drawable/showleft_normal" />
  19.         <TextView
  20.             android:layout_width="fill_parent"
  21.             android:layout_height="wrap_content"
  22.             android:layout_gravity="center_vertical"
  23.             android:layout_weight="2016"
  24.             android:gravity="center"
  25.             android:text="微信"
  26.             android:textColor="#fff"
  27.             android:textSize="20sp"
  28.             android:textStyle="bold" />
  29.         <ImageView
  30.             android:id="@+id/iv_menu_right"
  31.             android:layout_width="wrap_content"
  32.             android:layout_height="wrap_content"
  33.             android:layout_gravity="center_vertical"
  34.             android:layout_marginRight="3dp"
  35.             android:src="@drawable/showright_normal" />
  36.     </LinearLayout>
  37.     <android.support.v4.view.ViewPager
  38.         android:id="@+id/id_viewpager"
  39.         android:layout_width="fill_parent"
  40.         android:layout_height="0dp"
  41.         android:layout_weight="1" />
  42.     <LinearLayout
  43.         android:id="@+id/ly_main_tab_bottom"
  44.         android:layout_width="fill_parent"
  45.         android:layout_height="55dp"
  46.         android:background="@drawable/bottom_bar" >
  47.         <TextView
  48.             android:id="@+id/tv_tab_bottom_weixin"
  49.             android:layout_width="0dp"
  50.             android:layout_height="fill_parent"
  51.             android:layout_weight="1"
  52.             android:drawableTop="@drawable/tab_weixin_normal"
  53.             android:gravity="center"
  54.             android:text="微信"
  55.             android:textColor="@drawable/text_color_sel" />
  56.         <TextView
  57.             android:id="@+id/tv_tab_bottom_friend"
  58.             android:layout_width="0dp"
  59.             android:layout_height="fill_parent"
  60.             android:layout_weight="1"
  61.             android:drawableTop="@drawable/tab_find_frd_normal"
  62.             android:gravity="center"
  63.             android:text="朋友"
  64.             android:textColor="@drawable/text_color_sel" />
  65.         <TextView
  66.             android:id="@+id/tv_tab_bottom_contact"
  67.             android:layout_width="0dp"
  68.             android:layout_height="fill_parent"
  69.             android:layout_weight="1"
  70.             android:drawableTop="@drawable/tab_address_normal"
  71.             android:gravity="center"
  72.             android:text="通讯录"
  73.             android:textColor="@drawable/text_color_sel" />
  74.         <TextView
  75.             android:id="@+id/tv_tab_bottom_setting"
  76.             android:layout_width="0dp"
  77.             android:layout_height="fill_parent"
  78.             android:layout_weight="1"
  79.             android:drawableTop="@drawable/tab_settings_normal"
  80.             android:gravity="center"
  81.             android:text="设置"
  82.             android:textColor="@drawable/text_color_sel" />
  83.     </LinearLayout>
  84. </LinearLayout>

  85. menu_left.xml
  86. <?xml version="1.0" encoding="utf-8"?>
  87. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  88.     android:id="@+id/menu_left"
  89.     android:layout_width="match_parent"
  90.     android:background="#ccf"
  91.     android:layout_height="match_parent" />

  92. menu_right.xml
  93. <?xml version="1.0" encoding="utf-8"?>
  94. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  95.     android:id="@+id/menu_right"
  96.     android:layout_width="match_parent"
  97.     android:background="#ccf"
  98.     android:layout_height="match_parent" />
  99.  

附件列表

应用框架 ViewPager Tab Fragment SlidingMenu的更多相关文章

  1. ViewPager+tab+Fragment的滑动

    package teamhgl.xinwensudu; import android.os.Bundle;import android.support.v4.app.Fragment;import a ...

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

    action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...

  3. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  4. 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航

    Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...

  5. ViewPager之Fragment页面切换

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...

  6. ViewPager和Fragment的结合使用fragment里包含着listview的常见问题

    在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...

  7. 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题

    在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...

  8. 使用ViewPager切换Fragment时,防止频繁调用OnCreatView

    使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...

  9. viewpager和fragment预加载的解决

    在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...

随机推荐

  1. Java学习----不变的常量

    byte: -128~+127 short int:129 long float:1.5f  (1.5被系统默认为double) double:4.5d char:'s'  '1' boolean:t ...

  2. jquery mobile selectmenu下拉菜单

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. underscorejs-max学习

    2.15 max 2.15.1 语法: _.max(list, [iteratee], [context]) 2.15.2 说明: 返回list中的最小值. list为集合,数组.对象.字符串或arg ...

  4. C# .net 如何根据访问者IP获取所在地区

    第一步:在根目录添加新项(类),新建一个类文件,把以下文件粘贴到该类文件下:   using System; using System.Collections.Generic; using Syste ...

  5. oracle删除互相关联的记录

    今天遇到一个问题,在数据库中删除一条记录,但是在删除的时候报错了,报出该记录已经被其他子记录引用,想了好久不知道怎么做,后来发现报错提示信息中会提示删除该记录时影响了那个约束条件,于是思路出来了: 1 ...

  6. weekly review

    鉴于某位昔日工作在我身边的大师一直在写review,所以为了能靠近大师,我也要开始写review了. 无名师曾经说过,想要成为大师的话,要先找到一个大师,然后追随大师,再然后与大师通行,之后成为大师, ...

  7. 牛人总结python中string模块各属性以及函数的用法,果断转了,好东西

    http://blog.chinaunix.net/uid-25992400-id-3283846.html http://blog.csdn.net/xiaoxiaoniaoer1/article/ ...

  8. Unable to boot device in current state: Creating

    安装完xcode6.1后,将其改名为Xcode6.1.app,再移动个位置,启动模拟器,问题来了: Unable to boot device in current state: Creating 解 ...

  9. 之前C#代码的重新设计

    /* 我用python重构了一把这个代码 大家的反应似乎是过度设计了 好吧,我决定不那么激进,采用更中庸一些的重构 我也有些疑惑: 是否如果重构后的代码比重构前要多,就算过度了呢? */ void m ...

  10. POJ3267 The Cow Lexicon(dp)

    题目链接. 分析: dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数. dp[i] = min(dp[i+res]+res-strlen(pa[j])); 其中res 为从第 i 位开始匹配 ...