Viewpager+Fragment实现项目主布局

来源:互联网 发布:游戏开发编程语言 编辑:程序博客网 时间:2024/06/06 02:25


   效果预览图:  可点击菜单进行切换,也可以左右滑动进行切换。  

不知道为什么我的 .gif 为毛不显示.....


好了,首先在AS中完善 layout文件的布局


其实也就是一个top,一个buttom,和中间的一个ViewPager即可实现 (代码我就直接贴出来了,这个也没有什么好说的)


buttom_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="50dip">        <LinearLayout          android:layout_width="match_parent"          android:layout_height="50dip"          android:background="#00000000">            <LinearLayout              android:id="@+id/home_layout_view"              android:layout_width="wrap_content"              android:layout_height="50dip"              android:orientation="vertical"              android:gravity="center"              android:layout_weight="1">                    <ImageView                      android:id="@+id/home_image_view"                      android:layout_width="wrap_content"                      android:layout_height="wrap_content"                      android:layout_gravity="center"                      android:src="@drawable/comui_tab_home_selected" />                  <TextView                      android:layout_width="wrap_content"                      android:layout_height="wrap_content"                      android:text="首页"                      android:layout_marginTop="5dip"/>          </LinearLayout>            <LinearLayout              android:id="@+id/message_layout_view"              android:layout_width="wrap_content"              android:layout_height="50dip"              android:orientation="vertical"              android:gravity="center"              android:layout_weight="1">                <ImageView                  android:id="@+id/message_image_view"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_gravity="center"                  android:src="@drawable/comui_tab_message" />              <TextView                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:text="消息"                  android:layout_marginTop="5dip"/>          </LinearLayout>            <LinearLayout              android:id="@+id/pond_layout_view"              android:layout_width="wrap_content"              android:layout_height="50dip"              android:orientation="vertical"              android:gravity="center"              android:layout_weight="1">                <ImageView                  android:id="@+id/pond_image_view"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_gravity="center"                  android:src="@drawable/comui_tab_pond" />              <TextView                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:text="博客"                  android:layout_marginTop="5dip"/>          </LinearLayout>            <LinearLayout              android:id="@+id/person_layout_view"              android:layout_width="wrap_content"              android:layout_height="50dip"              android:orientation="vertical"              android:gravity="center"              android:layout_weight="1">                <ImageView                  android:id="@+id/person_image_view"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_gravity="center"                  android:src="@drawable/comui_tab_person" />              <TextView                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:text="我的"                  android:layout_marginTop="5dip"/>          </LinearLayout>        </LinearLayout>  </LinearLayout>
activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>  <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.yongning.hello.MainActivity"      android:orientation="vertical">  引入头     <include layout="@layout/top_layout" />        <android.support.v4.view.ViewPager          android:id="@+id/View_Pager"          android:layout_width="match_parent"          android:layout_height="match_parent"          android:layout_weight="1"/>  引入底部菜单      <include layout="@layout/buttom_layout" />    </LinearLayout>

OK,到目前为止,前端的UI应该就显示出来了。 接下来需要在activity中实现界面的点击以及滑动切换的效果。

中间是一个viewpager, 点击切换界面的效果是将viewpager和底部菜单进行联动效果就可以实现的。(代码中有相关的注解)


MainActivity 配置文件

  1. package com.yongning.hello;  
  2.   
  3. import android.support.v4.app.Fragment;  
  4. import android.support.v4.app.FragmentPagerAdapter;  
  5. import android.support.v4.view.ViewPager;  
  6. import android.support.v7.app.AppCompatActivity;  
  7. import android.os.Bundle;  
  8. import android.view.View;  
  9. import android.widget.ImageView;  
  10. import android.widget.LinearLayout;  
  11.   
  12. import com.yongning.hello.fragment.home_fragment;  
  13. import com.yongning.hello.fragment.message_fragment;  
  14. import com.yongning.hello.fragment.person_fragment;  
  15. import com.yongning.hello.fragment.pond_fragment;  
  16.   
  17. import java.util.ArrayList;  
  18. import java.util.List;  
  19.   
  20. public class MainActivity extends AppCompatActivity implements View.OnClickListener {  
  21.   
  22.     private ViewPager View_Pager;  
  23.     private LinearLayout home_layout_view;  
  24.     private LinearLayout message_layout_view;  
  25.     private LinearLayout pond_layout_view;  
  26.     private LinearLayout person_layout_view;  
  27.     private ImageView home_image_view;  
  28.     private ImageView message_image_view;  
  29.     private ImageView pond_image_view;  
  30.     private ImageView person_image_view;  
  31.   
  32.     private FragmentPagerAdapter fragmentPagerAdapter;  
  33.     private List<Fragment> fragments;  
  34.   
  35.     @Override  
  36.     protected void onCreate(Bundle savedInstanceState) {  
  37.         super.onCreate(savedInstanceState);  
  38.         setContentView(R.layout.activity_main);  
  39.   
  40.             initView();  
  41.             initEvent();  
  42.             SetSelect(0);   //首启动打开的界面为home_layout_view  
  43.     }  
  44.   
  45.     private void initView() {  
  46.         View_Pager = (ViewPager) findViewById(R.id.View_Pager);  
  47.         home_layout_view = (LinearLayout) findViewById(R.id.home_layout_view);  
  48.         message_layout_view = (LinearLayout) findViewById(R.id.message_layout_view);  
  49.         pond_layout_view = (LinearLayout) findViewById(R.id.pond_layout_view);  
  50.         person_layout_view = (LinearLayout) findViewById(R.id.person_layout_view);  
  51.         home_image_view = (ImageView) findViewById(R.id.home_image_view);  
  52.         message_image_view = (ImageView) findViewById(R.id.message_image_view);  
  53.         pond_image_view = (ImageView) findViewById(R.id.pond_image_view);  
  54.         person_image_view = (ImageView) findViewById(R.id.person_image_view);  
  55.   
  56.         //新建滑动的4个数据源 fragments数据集中  
  57.         fragments = new ArrayList<>();  
  58.         Fragment home = new home_fragment();  
  59.         Fragment message = new message_fragment();  
  60.         Fragment pond = new pond_fragment();  
  61.         Fragment person = new person_fragment();  
  62.         fragments.add(home);  
  63.         fragments.add(message);  
  64.         fragments.add(pond);  
  65.         fragments.add(person);  
  66.   
  67.         //新建一个适配器  
  68.         fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {  
  69.             @Override  
  70.             public Fragment getItem(int position) {  
  71.                 return fragments.get(position);  
  72.             }  
  73.   
  74.             @Override  
  75.             public int getCount() {  
  76.                 return fragments.size();  
  77.             }  
  78.         };  
  79.         //Viewpager传值  
  80.         View_Pager.setAdapter(fragmentPagerAdapter);  
  81.   
  82.         //View_Pager和itemMenu进行联动效果  
  83.         View_Pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {  
  84.             @Override  
  85.             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {  
  86.   
  87.             }  
  88.   
  89.             @Override  
  90.             public void onPageSelected(int position) {  
  91.                 ReSetimg();  
  92.                int Currentitem = View_Pager.getCurrentItem();  
  93.                 /** 
  94.                  *  文件进行索引调用 (Alt+Shift+m) 
  95.                  */  
  96.                 Switch_Tab(Currentitem);  
  97.             }  
  98.   
  99.             @Override  
  100.             public void onPageScrollStateChanged(int state) {  
  101.   
  102.             }  
  103.         });  
  104.     }  
  105.     //添加菜单点击事件  
  106.     private void initEvent() {  
  107.         home_layout_view.setOnClickListener(this);  
  108.         message_layout_view.setOnClickListener(this);  
  109.         pond_layout_view.setOnClickListener(this);  
  110.         person_layout_view.setOnClickListener(this);  
  111.     }  
  112.     //点击后的相关操作  
  113.     @Override  
  114.     public void onClick(View v) {  
  115.         ReSetimg();  
  116.         switch (v.getId()) {  
  117.             case R.id.home_layout_view :  
  118.                 SetSelect(0);  
  119.                 break;  
  120.             case R.id.message_layout_view :  
  121.                 SetSelect(1);  
  122.                 break;  
  123.             case R.id.pond_layout_view :  
  124.                 SetSelect(2);  
  125.                 break;  
  126.             case R.id.person_layout_view :  
  127.                 SetSelect(3);  
  128.                 break;  
  129.             default:  
  130.                 break;  
  131.         }  
  132.     }  
  133.   
  134.     private void SetSelect(int a) {  
  135.         ReSetimg();  
  136.         Switch_Tab(a);  
  137.     }  
  138.   
  139.     //设置点击菜单后当前图片变亮,同时View_Pager滑动到指定的界面  
  140.     private void Switch_Tab(int a) {  
  141.         switch (a) {  
  142.             case 0 :  
  143.                 View_Pager.setCurrentItem(0);  
  144.                 home_image_view.setImageResource(R.drawable.comui_tab_home_selected);  
  145.                 break;  
  146.             case 1 :  
  147.                 View_Pager.setCurrentItem(1);  
  148.                 message_image_view.setImageResource(R.drawable.comui_tab_message_selected);  
  149.                 break;  
  150.             case 2 :  
  151.                 View_Pager.setCurrentItem(2);  
  152.                 pond_image_view.setImageResource(R.drawable.comui_tab_pond_selected);  
  153.                 break;  
  154.             case 3 :  
  155.                 View_Pager.setCurrentItem(3);  
  156.                 person_image_view.setImageResource(R.drawable.comui_tab_person_selected);  
  157.                 break;  
  158.                 default:  
  159.                     break;  
  160.         }  
  161.     }  
  162.     //设置所有图片的颜色为暗色  
  163.     private void ReSetimg() {  
  164.         home_image_view.setImageResource(R.drawable.comui_tab_home);  
  165.         message_image_view.setImageResource(R.drawable.comui_tab_message);  
  166.         pond_image_view.setImageResource(R.drawable.comui_tab_pond);  
  167.         person_image_view.setImageResource(R.drawable.comui_tab_person);  
  168.     }  


其中4个fragment继承fragment,用onCreateView指向4个不同的界面显示在Viewpager上。

基本就这样了,不知道我有没有表达清楚,欢迎指正,源码下载地址:附上。



-----update-----

fragment的应用场景分为 ①:在同一个activity中可以定义多个fragment; ②:在多个activity中调用同一个fragment;
使用方法分为静态和动态2种;此demo使用的动态的fragment完成的,当点击菜单item的时候,内容区域的viewpager跳转到对应的界面。



我简单阐述下实现的思路:

首先实现UI的显示,中间的内容区域使用ViewPager完成;显示成功后设置

①:点击菜单键切换图片的颜色;

②:新建4个菜单对应的fragment封装进ViewPager中并显示出来;

③:给ViewPager和item一个联动效果,使得切换fragment时两者相互对应;


PS:fragment的使用方法:

      创建fragment子类继承fragment类;   用onCeateView重写fragment的布局;   将fragment引入到activity中;


(据说使用v4包下的fragment可以解决各类设备的适配问题哦~)

原创粉丝点击