重写用fragmentDemo实现效果图

话不多说开始干活:

此demo为4个fragment,下面的不是Button而是用布局写的.

先把下面(消息,联系人,动态,设置)的布局写好吧看activity_main.xml

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"</span></div>    xmlns:tools="http://schemas.android.com/tools"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">    android:layout_height="match_parent"</span></div>    android:layout_width="match_parent"
    android:orientation="vertical"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">        android:id="@+id/fg0"</span></div>    tools:context="com.lc.MainActivity" >

  <!--   <fragment
        android:layout_width="match_parent"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">        android:layout_width="match_parent"</span></div>        android:layout_height="0dp"
        android:layout_weight="1" /> -->

    <LinearLayout
        android:layout_height="wrap_content"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">            android:id="@+id/rl0"</span></div>        android:background="@drawable/tab_bg"
        android:orientation="horizontal" >

        <RelativeLayout
            android:layout_width="0dp"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:layout_width="wrap_content"</span></div>            android:layout_height="match_parent"
            android:layout_weight="0.1" >

            <ImageView
                android:id="@+id/iv0"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:id="@+id/tv0"</span></div>                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/message_selected" />

            <TextView
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:layout_centerHorizontal="true"</span></div>                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/iv0"
                android:text="消息"
                android:textColor="#FFFFFF" />
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:id="@+id/iv1"</span></div>        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/rl1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.1" >

            <ImageView
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:id="@+id/tv1"</span></div>                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/contacts_selected" />

            <TextView
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">        </RelativeLayout></span></div>                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/iv1"
                android:layout_centerHorizontal="true"
                android:text="联系人"
                android:textColor="#FFFFFF" />

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:layout_width="wrap_content"</span></div>        <RelativeLayout
            android:id="@+id/rl2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.1" >

            <ImageView
                android:id="@+id/iv2"
                android:layout_height="wrap_content"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:layout_below="@id/iv2"</span></div>                android:layout_centerHorizontal="true"
                android:src="@drawable/news_selected" />

            <TextView
                android:id="@+id/tv2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:layout_width="wrap_content"</span></div>                android:text="动态"
                android:textColor="#FFFFFF" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/rl3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.1" >

            <ImageView
                android:id="@+id/iv3"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">                android:layout_below="@id/iv3"</span></div>                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:src="@drawable/setting_selected" />

            <TextView
                android:id="@+id/tv3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"></LinearLayout></span></div>                android:text="设置"
                android:textColor="#FFFFFF" />
        </RelativeLayout>
    </LinearLayout>
<div style="text-align: center;"></div>

现在运行下吧,运行完后把注解掉的fragment打开来.(这里要改下东西,我写错了,搞到我查了10几分钟BUG,把fragment改成FrameLayout)

接下来开始写四个类继承fragment(我只写一个,其他三个一模一样的)

其中有涉及到inflater这个函数的使用,我是看这篇博客理解的inflater函数参数简介

MessageFragment.java文件内容

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">public class MessageFragment extends Fragment {</span></div>	/**
	 * 
	 */
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">	public View onCreateView(LayoutInflater inflater, ViewGroup container,</span></div>			Bundle savedInstanceState) {
		//注解父类有参构造方法,否则执行不到我们下面的代码
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		//方法 inflate(int resource, ViewGroup root, boolean attachToRoot) 里面的参数大致意思是</span></div>		//return super.onCreateView(inflater, container, savedInstanceState);
		//resource:需要加载布局文件的id,意思是需要将这个布局文件中加载到Activity中来操作。
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		//attachToRoot:是否将root附加到布局文件的根视图上</span></div>		//root:需要附加到resource资源文件的根控件,什么意思呢,就是inflate()会返回一个View对象,如果第三个参数attachToRoot为true,就将这个root作为根对象返回.
		//inflater参数简介http://www.cnblogs.com/yuxing/archive/2012/02/18/2357740.html
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">}</span></div>		View inflate = inflater.inflate(R.layout.messagefragment_main, container, false);
		return inflate;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">	}</span></div>

messagefragment_main.xml布局文件内容

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"</span></div>    android:layout_width="match_parent"
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">    android:orientation="vertical"</span></div>    android:layout_height="match_parent"
    <TextView 
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">        android:layout_height="wrap_content"</span></div>        android:layout_width="wrap_content"
        android:text="message"
        />
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"></LinearLayout></span></div>
最后在MainActivity.java写入

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">package com.lc;</span></div>
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import android.app.Activity;</span></div><div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import android.app.FragmentManager;</span></div><div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import android.app.FragmentTransaction;</span></div>import android.graphics.Color;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import android.view.View;</span></div>import android.os.Bundle;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import android.view.Window;</span></div>import android.view.View.OnClickListener;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import com.lc.fragment.MessageFragment;</span></div>import android.widget.ImageView;
import android.widget.TextView;

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">import com.lidroid.xutils.view.annotation.ViewInject;</span></div>import com.lidroid.xutils.ViewUtils;

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">	@ViewInject(R.id.messageLayout)</span></div>public class MainActivity extends Activity implements OnClickListener {
	//获取rl0实例
	View messageLayout;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">	@ViewInject(R.id.message_text)</span></div>	//获取iv0实例
	@ViewInject(R.id.message_image)
	ImageView messageImage;
	//获取tv0实例
	TextView messageText;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">	private MessageFragment messageFragment;</span></div>	//用于对fragmentmanager进行管理
	private FragmentManager fragmentManager;
	//MessageFragment类实例
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		// 请求系统特征,特征为无标题FEATURE_NO_TITLE记住一定要比setContentView否则报错,自己试下报什么错</span></div>	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		//获取fragmentmanager管理实例</span></div>		setContentView(R.layout.activity_main);
		// 我的理解是注册嘻嘻
		ViewUtils.inject(this);
		// 初始化布局
		messageLayout.setOnClickListener(this);
		fragmentManager = getFragmentManager();
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">			setTabSelection(0);</span></div>		//设置打开软件时的起始页为第一页
		setTabSelection(0);
	}
	
	public void onClick(View v) {
		//根据ID匹配相应的实例.
		switch (v.getId()) {
		//匹配到messagelayout
		case R.id.messageLayout:
			//函数内容在下面
			break;
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">	 */</span></div>		case 1:
			setTabSelection(1);
			break;
		case 2:
			setTabSelection(2);
			break;
		case 3:
			setTabSelection(3);
			break;
		default:
			break;
		}
	}
	/**
	 * 根据ID来显示要显示的页面从0开始
	 * @param i
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		FragmentTransaction beginTransaction = fragmentManager.beginTransaction();</span></div>	private void setTabSelection(int i) {
		//这里得先清空下下面4个东西的状态先,说是清空其实就是把它们的属性改了而已.
		clearSelection();
		//fragmentmanage管理类开启fragment事务
		//这步先把所有fragment界面都隐藏起来先.
		hideFragments(beginTransaction);
		//看传进来的ID  case到哪个结果
		switch (i) {
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">			//为了节省资源就判断下是否创建了实例,一启动程序时就会运行到这里来,因为我们设置了默认页就是这里了</span></div>		//0就是第一个页面
		case 0:
			//因为都已经来到第一个页面了所以下面的4个图标的状态也都设置相应的图片了,从而给人一种按下去了的错觉
			messageImage.setImageResource(R.drawable.message_selected);
			messageText.setTextColor(Color.WHITE);
			if (messageFragment == null) {
				//创建messageFragment实例
<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		case 1:</span></div>				messageFragment = new MessageFragment();
				//这里不太会表达,就认为是用事务来把messageFragment这个实例添加进FragmentLayout里
				beginTransaction.add(R.id.fg0, messageFragment);
			}else{
				//通过事务显示
				beginTransaction.show(messageFragment);
			}
			break;

			break;
		case 2:

			break;
		case 3:

<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">		messageText.setTextColor(Color.parseColor("#FFFFFF"));</span></div>			break;
		default:
			break;
		}
<pre name="code" class="java">beginTransaction<span style="font-family: Arial, Helvetica, sans-serif;">.commit();</span>
}private void hideFragments(FragmentTransaction beginTransaction) {//通过事务影藏beginTransaction.hide(messageFragment);}private void clearSelection() {//其实就是把属性给设置成没有点击的错觉.messageImage.setImageResource(R.drawable.message_unselected);}<div style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;">}</span></div>
 

注:我晕死,修改文章全是源代码文件看不懂呀,我在这里附加上来吧
//获取iv0实例
@ViewInject(R.id.message_image)
ImageView messageImage;与ImageView messageImage = (ImageView)findViewById(R.id.message_image);效果是一样的,只是我太懒惰用了开源框架.


一点小小笔记:: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前景),bg是背景,可以同时使用。

其实写这文章挺纠结的,我也是从人家那里看到的博客,可是原博客我没找了,所以自己写了,且修改了一点点内容,并不是原创.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值