Android ViewPager+Fragment 简略实现微信主界面

Android ViewPager+Fragment 简单实现微信主界面

主界面 主要使用ViewPager + Fragment 实现 界面的滑动

消息提示主要使用了github 的开源控件 https://github.com/stefanjauker/BadgeView

 

1.实现 TopBar 布局

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:background="#000000"
    >
    
  <LinearLayout 
      android:layout_alignParentLeft="true"
      android:gravity="center"
      android:layout_centerVertical="true"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:orientation="horizontal">
   <ImageView 
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/actionbar_icon"/>  
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="微信"
        android:layout_marginLeft="5dp"
        android:textColor="#FFFAF0"
        android:textSize="15dp"/>    
      
  </LinearLayout>  
  
   <LinearLayout 
      android:layout_alignParentRight="true"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:layout_centerVertical="true"
      android:orientation="horizontal">
    <ImageView 
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/actionbar_search_icon"/>
    
     <ImageView 
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/actionbar_add_icon"/>
        
      <ImageView 
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/actionbar_more_icon"/>
       
   </LinearLayout>  
    

</RelativeLayout>

 2.实现选项卡布局

 

 

<?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="40dp"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="37dp"
        android:orientation="horizontal" >

        <LinearLayout
            android:id="@+id/ll_chat"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_chat"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="聊天"
                android:textColor="#FFF68F"
                android:textSize="15sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_find"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_find"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="发现"
                android:textColor="#000000"
                android:textSize="15sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_contact"
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_contact"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="通信录"
                android:textColor="#000000"
                android:textSize="15dp" />
        </LinearLayout>
    </LinearLayout>

    <ImageView
        android:id="@+id/tabline_contact"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:background="@drawable/abc_ab_transparent_light_holo" />

</LinearLayout>

 

 

3.将 TopBar 选项卡 插入到主布局中,使用ViewPager实现滑动效果

 

<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"
        >
     <include layout="@layout/topbar" />
     <include layout="@layout/optionbar" />   

    <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
       />

</LinearLayout>

 

 

4.分别实现 三个Fragment 的布局,这里只实现一个,其它几个类似     contact_fragment.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"
    android:gravity="center"
        >

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:text="this is chat fragment"/>

</LinearLayout>

 

5.继承 Fragment 将布局文件填充到Fragment中去

package com.example.weixinui;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ContactFragment extends Fragment{
	
	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
		return inflater.inflate(R.layout.contact_fragment, container, false);
	}


}

 

 

6.实现MainActivity 的业务逻辑

 

package com.example.weixinui;

import java.util.ArrayList;
import java.util.List;

import com.jauker.widget.BadgeView;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {
	
	private ViewPager mViewPager;
	private List<Fragment>  mData;
	private FragmentPagerAdapter  mAdapter;
	private TextView mChatTextView,mFindTextView,mContactTextView;
	private LinearLayout  mChatLinearLayout,mFindLinearLayout,mContactLinearLayout;
    private BadgeView mChatBadgeView,mFindBadgeView,mContactBadgeView;
    private ImageView mTabLine;
    private int screenWidth;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.main);
		
		initView();
		initTabLine();
		
	}

	//初始化控件
	private void initView() {
		mChatTextView = (TextView) findViewById(R.id.tv_chat);
		mFindTextView = (TextView) findViewById(R.id.tv_find);
		mContactTextView = (TextView) findViewById(R.id.tv_contact);
		
		mChatLinearLayout = (LinearLayout) findViewById(R.id.ll_chat);
		mFindLinearLayout = (LinearLayout) findViewById(R.id.ll_find);
		mContactLinearLayout = (LinearLayout) findViewById(R.id.ll_contact);
		
		mViewPager = (ViewPager) findViewById(R.id.viewpager);
		mData = new ArrayList<Fragment>();
		ChatFragment mChatFragment = new ChatFragment();
		ContactFragment mContactFragment = new ContactFragment();
		FindFragment mFindFragment = new FindFragment();
		
		mChatBadgeView = new BadgeView(this);
		mFindBadgeView = new BadgeView(this);
		mContactBadgeView = new BadgeView(this);
		
		mData.add(mChatFragment);
		mData.add(mContactFragment);
		mData.add(mFindFragment);
		
		mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
			
			@Override
			public int getCount() {
				return mData.size();
			}
			
			@Override
			public Fragment getItem(int arg0) {
				return mData.get(arg0);
			}
		};
		
		mViewPager.setAdapter(mAdapter);
		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int position) {
				resetTextView();
				switch (position) {
				case 0:
					updateChatLinearLayout();	
					break;
	            case 1:
	            	updateFindLinearLayout();
					break;	
	             case 2:
	            	 updateContactLinearLayout();
					break;
				default:
					break;
				}
				
			}

			
			@Override
			public void onPageScrolled(int pos, float posOffset, int posOffsetPex) {
		        LinearLayout.LayoutParams lp = (LayoutParams)mTabLine.getLayoutParams();
		        lp.leftMargin = (int) ((pos+posOffset) * screenWidth);
		        mTabLine.setLayoutParams(lp);
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub
				
			}
		});
	}

	//重置显示文本的颜色
	private void resetTextView(){
		mChatTextView.setTextColor(Color.BLACK);
		mFindTextView.setTextColor(Color.BLACK);
		mContactTextView.setTextColor(Color.BLACK);

	}
	
	//重置BadgeView 显示位置
	private void resetBadgeView(){
		mChatLinearLayout.removeView(mChatBadgeView);
		mFindLinearLayout.removeView(mFindBadgeView);
	    mContactLinearLayout.removeView(mContactBadgeView);
	}
	
	private void updateChatLinearLayout() {
		resetBadgeView();
		mChatBadgeView.setBadgeCount(5);
		mChatLinearLayout.addView(mChatBadgeView);
		mChatTextView.setTextColor(Color.BLUE);
	}
	
	private void updateFindLinearLayout() {
		resetBadgeView();
		mFindBadgeView.setBadgeCount(5);
		mFindLinearLayout.addView(mFindBadgeView);
		mFindTextView.setTextColor(Color.BLUE);
	}
	
	private void updateContactLinearLayout() {
		resetBadgeView();
	    mContactBadgeView = new BadgeView(MainActivity.this);
	    mContactBadgeView.setBadgeCount(5);
		mContactLinearLayout.addView(mContactBadgeView);
		mContactTextView.setTextColor(Color.BLUE);
	}
	
	  //根据屏幕的宽度,初始化引导线的宽度   
    private void initTabLine()  
    {  
        mTabLine = (ImageView) findViewById(R.id.tabline_contact);  
        DisplayMetrics displayMetrics = new DisplayMetrics();  
        getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);  
        screenWidth = displayMetrics.widthPixels;  
        LinearLayout.LayoutParams lp =  (LayoutParams) mTabLine.getLayoutParams();  
        lp.width = screenWidth / 3;  
        mTabLine.setLayoutParams(lp);  
    }

}

 

 

效果图:


Android  ViewPager+Fragment 简略实现微信主界面