应用场景:

众所了解Android上的界面展示都是通过Activity实现的,可是Activity也有它的局限性,相同的界面在手机上显示可能非常好看,在平板上就未必了。为了让界面能够在平板上更好地展示,Android在3.0版本号引入了Fragment(碎片)功能,它非常类似于Activity,能够像Activity一样包括布局。Fragment一般是嵌套在Activity中使用的。首先须要注意,Fragment是在3.0版本号引入的,假设你使用的是3.0之前的系统,须要先导入android-support-v4的jar包才干使用Fragment功能。

知识点介绍:

一、怎样创建Fragment。
首先须要创建继承Fragment的子类,Fragment类的代码看起来非常像Activity。它与Activity一样都有回调函数,比如onCreate(),onStart(),onPause(),和onStop()。其实,假设你正在将一个现成的Android应用转而使用Fragment来实现,能够简单的将代码从Activity的回调函数移植到各自的Fragment的回调函数中,简单而可行。
Fragment的生命周期方法主要包含例如以下:

1、onAttach

2、onCreate

3、onCreateView

4、onActivityCreated

5、onDestroyView

6、onDestroy

7、onPause

public class TestFragment extends Fragment {/**当Fragment已经跟Activity关联上的时候,这个回调被调用。Activity会作为onAttach()回调方法的參数来传递*/@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);}/**当创建Fragment时,系统调用该方法在实现代码中, 应当初始化想要在Fragment中保持的必要组件, 当Fragment被暂停或者停止后能够再次恢复。*/ @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}/**Fragment第一次绘制它的用户界面的时候, 系统会调用此方法。为了绘制Fragment的UI, 此方法必须返回一个View, 这个view是你的Fragment布局的根view。*/@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// R.layout.activity_main 自己定义的布局文件View view = inflater.inflate(R.layout.activity_main, null);return view;//return super.onCreateView(inflater, container, savedInstanceState);}/**当Activity的onCreate()方法运行完之后,调用这个回调方法。*/@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);}/**当跟Fragment关联的视图层正在被删除时,调用这个回调方法。*/@Overridepublic void onDestroyView() {super.onDestroyView();}/**当从Activity中解除Fragment的关联时,调用这个回调方法。*/@Overridepublic void onDestroy() {super.onDestroy();}/*================================================================*//**用户将要离开Fragment时,系统调用这种方法作为第一个指示(然而它不总是意味着Fragment将被销毁。) 在当前用户会话结束之前,通常应当在这里提交不论什么应该持久化的变化(由于用户有可能不会返回)。*/@Overridepublic void onPause() {super.onPause();}}

二、怎样将Fragment加入到Activity。
此部分能够參看http://blog.csdn.net/t12x3456/article/details/8104574 这篇文章,博主写的非常详尽。本文主要側重于【在代码中加入Fragment到ViewGroup】的方式。
使用此方法须要了解一下下面三个类对象:
android.support.v4.app.FragmentActivity
android.support.v4.app.FragmentManager
android.support.v4.app.FragmentTransaction
首先我们使用的Activity须要继承(extends)FramentActivtiy。
public class MainActivity extends FragmentActivity然后通过获取FragmentTransaction 对象得到FragmentTransaction来完毕Fragment的事务(比方加入,删除,替换等)操作,最后提交事务。

                FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();ExampleFragment fragment = new ExampleFragment();transaction.add(R.id.main_frameLayout, fragment);transaction.commit();

使用方式:

第一步:新建项目FragmentStudy,AndroidManifest.xml例如以下:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.fragmentstudy"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.Black.NoTitleBar" >        <activity            android:name="com.example.fragmentstudy.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

第二步:创建ExampleFragment(Fragment的子类)与ExampleFragment对应的布局文件layout_fragment_example.xml。
【layout_fragment_example.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="match_parent"    android:orientation="vertical" >    <TextView android:layout_height="wrap_content"        android:layout_width="match_parent"        android:text="ExampleFragment"        android:gravity="center"        android:id="@+id/fragment_textView"        android:textColor="@android:color/black"/></LinearLayout>

【ExampleFragment.java】

import java.util.Date;import android.annotation.SuppressLint;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;@SuppressLint("ValidFragment")public class ExampleFragment extends Fragment{private String title = "";public ExampleFragment(String title) {super();this.title = title;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.layout_fragment_example, null);TextView textView = (TextView) view.findViewById(R.id.fragment_textView);textView.setText(textView.getText().toString()+"\n"+title+"\n"+new Date().getTime());//return super.onCreateView(inflater, container, savedInstanceState);return view;}}
第三步:编写activity_main.xml主布局文件与MainActivity.java。
【activity_main.xml】

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:background="@android:color/white"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <FrameLayout android:layout_height="match_parent"        android:layout_width="match_parent"        android:id="@+id/main_frameLayout">    </FrameLayout>    <LinearLayout android:layout_height="wrap_content"        android:layout_width="match_parent"        android:layout_alignParentBottom="true"        android:orientation="vertical">        <GridView android:layout_height="wrap_content"            android:layout_width="match_parent"            android:columnWidth="50dp"             android:horizontalSpacing="10dp"            android:id="@+id/main_gridView"            android:numColumns="3">        </GridView>    </LinearLayout></RelativeLayout>
【MainActivity.java】

import java.util.ArrayList;import java.util.List;import com.example.fragmentstudy.adapter.GridAdapter;import com.example.fragmentstudy.domain.GridInfo;import android.os.Bundle;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.GridView;public class MainActivity extends FragmentActivity {private GridView gridView;private List<GridInfo> gridInfos = new ArrayList<GridInfo>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();}private void initViews() {gridView = (GridView) findViewById(R.id.main_gridView);GridAdapter gridAdapter = new GridAdapter(MainActivity.this);getGridOnfoList();gridAdapter.setList(gridInfos);gridView.setAdapter(gridAdapter);gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();ExampleFragment fragment = new ExampleFragment("主功能页面");transaction.add(R.id.main_frameLayout, fragment);transaction.commit();gridView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();//通过anim xml 配置Fragment切换效果  new / old//上出下进transaction.setCustomAnimations(R.anim.push_up_in, R.anim.push_up_out);GridInfo info = gridInfos.get(arg2);ExampleFragment fragment = new ExampleFragment(info.getName());transaction.replace(R.id.main_frameLayout,fragment);//transaction.addToBackStack(null);  //提供返回上一页面的功能transaction.commit();}});}private void getGridOnfoList() {for(int i=0;i<6;i++){GridInfo gridInfo = new GridInfo("測试"+i, R.drawable.ic_launcher+"");gridInfos.add(gridInfo);}}}

第四步:本演示项目的主要代码如上,一下为辅助的GirdView菜单效果的相关.java文件与.xml文件。

【GridInfo.java】

public class GridInfo {private String name;private String appImage;public GridInfo(String name, String appImage) {super();this.name = name;this.appImage = appImage;}public String getAppImage() {return appImage;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

【GirdAdapter.java】

import java.util.List;import com.example.fragmentstudy.R;import com.example.fragmentstudy.domain.GridInfo;import android.content.Context;import android.graphics.Color;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class GridAdapter extends BaseAdapter {private class GridHolder {ImageView appImage;TextView appName;}private Context context;private List<GridInfo> list;private LayoutInflater mInflater;public GridAdapter(Context c) {super();this.context = c;}public void setList(List<GridInfo> list) {          this.list = list;          mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);      }@Overridepublic int getCount() { return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {GridHolder holder;          if (convertView == null) {                 convertView = mInflater.inflate(R.layout.grid_item, null);                 holder = new GridHolder();              holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);              holder.appName = (TextView)convertView.findViewById(R.id.itemText);              convertView.setTag(holder);             }else{               holder = (GridHolder) convertView.getTag();             }          GridInfo info = list.get(position);          if (info != null) {                 holder.appName.setText(info.getName());              int colorInt = Color.parseColor("#CCFF66");            if(position%6==1){            colorInt = Color.parseColor("#336699");            } else if (position%6==2) {            colorInt = Color.parseColor("#663366");}else if (position%6==3) {            colorInt = Color.parseColor("#ABCDEF");}else if (position%6==4) {            colorInt = Color.parseColor("#669933");}else if (position%6==5) {            colorInt = Color.parseColor("#CC3399");}                   holder.appImage.setBackgroundColor(colorInt);            holder.appName.setTextColor(Color.BLACK);            holder.appName.setGravity(Gravity.CENTER);        }          return convertView;  }}

【grid_item.xml】

<?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="wrap_content"    android:paddingBottom="4dip" >    <ImageView        android:id="@+id/itemImage"        android:layout_width="60dp"        android:layout_height="60dp"        android:layout_centerHorizontal="true" >    </ImageView>    <TextView        android:id="@+id/itemText"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/itemImage"        android:layout_centerHorizontal="true"        android:layout_marginTop="4dp"        android:gravity="center"        android:text="TextView01"        android:textColor="@android:color/black"        android:textSize="10dp" >    </TextView></RelativeLayout>

除此之外还须要两个动画效果文件res/anim下的push_up_in.xml、push_up_out.xml。
【push_up_in.xml】

<?xml version="1.0" encoding="utf-8"?>     <!-- 上滑切入 --><set xmlns:android="http://schemas.android.com/apk/res/android"           android:interpolator="@android:anim/decelerate_interpolator">         <translateandroid:fromXDelta="0%p" android:toXDelta="0%p"android:fromYDelta="100%p" android:toYDelta="0%p"android:duration="1000" /></set> 
【push_up_out.xml】

<?xml version="1.0" encoding="utf-8"?>     <!-- 上滑切出 --><set xmlns:android="http://schemas.android.com/apk/res/android"           android:interpolator="@android:anim/decelerate_interpolator">             <translateandroid:fromXDelta="0%p" android:toXDelta="0%p"android:fromYDelta="0%p" android:toYDelta="-100%p"android:duration="1000" /></set> 

页面效果:


下载地址:

点击下载资源! http://download.csdn.net/detail/ma_hoking/7425955




更多相关文章

  1. 使用Jquery Mobile设计Android通讯录
  2. Unity Android(安卓)安装apk后显示两个app的问题
  3. Android上使用Google Map
  4. Android简单视频播放器之VideoView(一)
  5. 基于 Android(安卓)NDK 的学习之旅----- Java 方法映射到C中的签
  6. Android成长记(1)-----android环境搭建与adb shell 命令
  7. 自定义控件:onDraw 方法实现仿 iOS 的开关效果
  8. android扁平化界面设计—在android中使用Font-Awesome
  9. Android(安卓)Studio LibraryModule中引用aar

随机推荐

  1. Android录音并实时转成MP3格式
  2. Android(安卓)Studio中如何解决重复依赖
  3. Android之简易音乐播放器,MediaPlayer的使
  4. android学习笔记之多线程学习
  5. 蓝牙协议
  6. Android开发者指南(9) ―― ProGuard
  7. 解决谷歌Android SDK下载慢的问题
  8. android选择图片或拍照图片上传到服务器(
  9. android 模拟器使用
  10. Android状态栏透明(沉浸式效果)