ImageView
的宽度。BadgeView
的使用。(非常简单)ViewPager
对应的各个Fragment的tab字体颜色改变的小技巧。ViewPager
的滑动跟随tabLine。(比较取巧,也很简单)ViewPager
+ Fragment
的简单使用。xml布局:
Activity的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" >
<include layout="@layout/top1" />
<include layout="@layout/top2" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="5dp" >
<ImageView
android:id="@+id/iv_line"
android:layout_width="120dp"
android:layout_height="match_parent"
android:background="@drawable/tabline" />
LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
LinearLayout>
里面的两个include的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/background_dark"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/actionbar_icon" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="微信"
android:textColor="@android:color/white" />
LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:gravity="center" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/actionbar_search_icon" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/actionbar_add_icon" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/actionbar_more_icon" />
LinearLayout>
RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="37dp"
android:background="@android:color/darker_gray"
android:baselineAligned="false"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/ll_chat_warpper"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" >
<TextView
android:id="@+id/tv_chat"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="聊天"
android:textColor="#FF0000FF" />
LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" >
<TextView
android:id="@+id/tv_friend"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="发现" />
LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center" >
<TextView
android:id="@+id/tv_contect"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="通讯录" />
LinearLayout>
LinearLayout>
Fragment
的代码,因为,对Fragment
里面没有做任何的操作,也没有搞什么布局。自身在里面放了一个TextView
,所以,Fragment
就贴一个出来了,后面两个都一样的。package org.duck.moocweixin.f;
import org.duck.moocweixin.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ChatFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.tab01, container, false);
}
}
Activity
的代码,关键的部分都在这里了:package org.duck.moocweixin;
import java.util.ArrayList;
import java.util.List;
import org.duck.moocweixin.f.ChatFragment;
import org.duck.moocweixin.f.ContectFragment;
import org.duck.moocweixin.f.FriendFragment;
import org.duck.moocweixin.weight.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.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends FragmentActivity implements
OnPageChangeListener {
private ViewPager viewPager;
private PagerAdapter adapter;
private List fragments;
private TextView tvChat;
private TextView tvFriend;
private TextView tvContact;
private LinearLayout chatWarpper;
private BadgeView badgeView;
private int mScreenWidth1_3;
private ImageView textLine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chatWarpper = (LinearLayout) findViewById(R.id.ll_chat_warpper);
initViewPager();
initTextView();
initTextLine();
badgeView = new BadgeView(this);
// {
// // 使用这种方式获取的宽度设置给滑动跟随的图片不行,就是不显示!!!why>????
// WindowManager wm = getWindow().getWindowManager();
// Display display = wm.getDefaultDisplay();
// mScreenWidth1_3 = display.getWidth() / 3;
// System.out.println("mScreenWidth1_3: " + mScreenWidth1_3);
// }
}
private void initTextLine() {
textLine = (ImageView) findViewById(R.id.iv_line);
Display display = getWindow().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
mScreenWidth1_3 = outMetrics.widthPixels / 3;
// System.out.println("#####:"+mScreenWidth1_3);
LayoutParams params = textLine.getLayoutParams();
params.width = mScreenWidth1_3;
// params.width = 400;
textLine.setLayoutParams(params);// 不加这一句上面的设置宽度没用
}
private void initTextView() {
tvChat = (TextView) findViewById(R.id.tv_chat);
tvFriend = (TextView) findViewById(R.id.tv_friend);
tvContact = (TextView) findViewById(R.id.tv_contect);
}
private void initViewPager() {
viewPager = (ViewPager) findViewById(R.id.viewPager);
fragments = new ArrayList();
fragments.add(new ChatFragment());
fragments.add(new FriendFragment());
fragments.add(new ContectFragment());
adapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return fragments.size();
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
};
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(this);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// System.out.println("position: " + position + " positionOffset: "
// + positionOffset + " positionOffsetPixels: "
// + positionOffsetPixels);
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) textLine
.getLayoutParams();
if (position == 0) {// 只能 0-->1 滑动
// 只能0-->1滑动
lp.leftMargin = (int) (positionOffsetPixels / 3);
} else if (position == 1) {
lp.leftMargin = (int) (positionOffsetPixels / 3) + mScreenWidth1_3;
} else if (position == 2) {
lp.leftMargin = (int) (positionOffsetPixels / 3) + mScreenWidth1_3
* 2;
}
textLine.setLayoutParams(lp);
}
@Override
public void onPageSelected(int position) {
resetTextViewText();
switch (position) {
case 0:
tvChat.setTextColor(Color.BLUE);
if (badgeView != null) {
chatWarpper.removeView(badgeView);// 避免添加多次添加
}
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tvChat
.getLayoutParams();
lp.height = LayoutParams.WRAP_CONTENT;
lp.width = LayoutParams.WRAP_CONTENT;
lp.leftMargin = 5;
badgeView.setBadgeCount(6);
chatWarpper.addView(badgeView, lp);
break;
case 1:
tvFriend.setTextColor(Color.BLUE);
break;
case 2:
tvContact.setTextColor(Color.BLUE);
break;
default:
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {// nothing to do
// 这个方法在这里没意义
}
// / tools
private void resetTextViewText() {
tvChat.setTextColor(Color.BLACK);
tvFriend.setTextColor(Color.BLACK);
tvContact.setTextColor(Color.BLACK);
}
}