Android之Fragment实现界面切换学习笔记
2016-09-04 01:09
411 查看
Android之Fragment实现界面切换学习笔记
今天来实现一个简单的界面切换功能,关于页面的切换相信大家都非常熟悉,比如微信、QQ、支付宝等这些常用软件都会有界面切换功能,根据软件的要求不同,我们所设计的页面切换个数也会不同,今天我就写一个四个基本页面切换的小Demo,具体的代码功能都会在注释上写上。PS:如果想和是我一样的效果,记得先把系统默认的ActionBar去掉,在头部添加我们自定义的top_bar,我们只需要在AndroidManifest.xml中修改一下
android:theme="@style/AppTheme"为以下代码
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
下面先看看界面效果吧:
BaseFragment.java
/** * 公用的界面,考虑到通用性,就先写一个简单的BaseFragment吧 * 所有子类界面只需要设置简单的界面内容即可 */ public abstract class BaseFragment extends Fragment { //公用内容设置 private TextView mBaseTvTitle; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_base, container, false); mBaseTvTitle = ((TextView) view.findViewById(R.id.BaseTvTitle)); setTitle(mBaseTvTitle); return view; } /** * 让子类去实现对应的内容 * @param tvTitle */ protected abstract void setTitle(TextView tvTitle); }
FLFragment .java
/** * 分类Fragment */ public class FLFragment extends BaseFragment { /** * 设置对应的内容即可 * @param tvTitle */ @Override protected void setTitle(TextView tvTitle) { tvTitle.setText("分类界面"); tvTitle.setTextSize(30); tvTitle.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); } }
RMFragment .java
/** * 热门Fragment */ public class RMFragment extends BaseFragment { @Override protected void setTitle(TextView tvTitle) { tvTitle.setText("热门界面"); tvTitle.setTextSize(30); tvTitle.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); } }
Fragment.java
/** * 指南Fragment */ public class ZNFragment extends BaseFragment { @Override protected void setTitle(TextView tvTitle) { tvTitle.setText("指南界面"); tvTitle.setTextSize(30); tvTitle.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); } }
WDFragment .java
/** * 我的Fragment */ public class WDFragment extends BaseFragment { @Override protected void setTitle(TextView tvTitle) { tvTitle.setText("我的界面"); tvTitle.setTextSize(30); tvTitle.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); } }
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener { //分类页面常量 private final int FL = 1; //指南页面常量 private final int ZN = 2; //热门页面常量 private final int RM = 3; //我的页面常量 private final int WD = 4; //指南页面布局控件 private LinearLayout mLinZN; //分类页面布局控件 private LinearLayout mLinFL; //热门页面布局控件 private LinearLayout mLinRM; //我的页面布局控件 private LinearLayout mLinWD; //分类Fragment private Fragment mFLFragment; //指南Fragment private Fragment mZNFragment; //我的Fragment private Fragment mWDFragment; //热门Fragment private Fragment mRMFragment; //热门ImageButton控件 private ImageButton mRMIBtn; //指南ImageButton控件 private ImageButton mZNIBtn; //分类ImageButton控件 private ImageButton mFLIBtn; //我的ImageButton控件 private ImageButton mWDIBtn; //热门文字控件 private TextView mRMTv; //指南文字控件 private TextView mZNTv; //分类文字控件 private TextView mFLTv; //我的文字控件 private TextView mWDTv; private FragmentManager manager; private FragmentTransaction transaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); event(); } /** * 初始化所有控件 */ private void initView() { mLinZN = (LinearLayout) findViewById(R.id.mLinZN); mLinFL = (LinearLayout) findViewById(R.id.mLinFenLei); mLinRM = (LinearLayout) findViewById(R.id.mLinReMen); mLinWD = (LinearLayout) findViewById(R.id.mLinUser); mRMIBtn = (ImageButton) findViewById(R.id.mBtnRM); mZNIBtn = (ImageButton) findViewById(R.id.mBtnZN); mFLIBtn = (ImageButton) findViewById(R.id.mBtnFL); mWDIBtn = (ImageButton) findViewById(R.id.mBtnWD); mRMTv = (TextView) findViewById(R.id.mTvReMen); mZNTv = (TextView) findViewById(R.id.mTvZhiNan); mFLTv = (TextView) findViewById(R.id.mTvFenLei); mWDTv = (TextView) findViewById(R.id.mTvUser); manager = getSupportFragmentManager(); } /** * 初始化事件 */ private void event() { mLinFL.setOnClickListener(this); mLinRM.setOnClickListener(this); mLinWD.setOnClickListener(this); mLinZN.setOnClickListener(this); } /** * 初始化所有控件状态为原始状态 */ private void initColor() { mRMTv.setTextColor(getResources().getColor(R.color.normal)); mZNTv.setTextColor(getResources().getColor(R.color.normal)); mFLTv.setTextColor(getResources().getColor(R.color.normal)); mWDTv.setTextColor(getResources().getColor(R.color.normal)); mRMIBtn.setBackgroundResource(R.mipmap.remen_normal); mZNIBtn.setBackgroundResource(R.mipmap.zhinan_normal); mFLIBtn.setBackgroundResource(R.mipmap.fenlei_normal); mWDIBtn.setBackgroundResource(R.mipmap.user_normal); } /** * 隐藏所有已经显示了Fragment * @param transaction */ private void hint(FragmentTransaction transaction) { if(mZNFragment != null){ transaction.hide(mZNFragment); } if(mFLFragment != null){ transaction.hide(mFLFragment); } if(mWDFragment != null){ transaction.hide(mWDFragment); } if(mRMFragment != null){ transaction.hide(mRMFragment); } } @Override public void onClick(View view) { initColor(); switch (view.getId()){ case R.id.mLinFenLei: //添加分类布局的Fragment addFragment(FL); break; case R.id.mLinReMen: //添加热门布局的Fragment addFragment(RM); break; case R.id.mLinUser: //添加我的布局的Fragment addFragment(WD); break; case R.id.mLinZN: //添加指南布局的Fragment addFragment(ZN); break; } } /** * 添加对应的布局,根据传来的ID进行添加 * @param index */ private void addFragment(int index){ //获取事物 transaction = manager.beginTransaction(); //每次先隐藏所有的Fragment,然后加载当前要显示的Fragment hint(transaction); switch (index){ case FL: //设置当前的文字和ImageButton为橙色 mFLTv.setTextColor(getResources().getColor(R.color.pressed)); mFLIBtn.setBackgroundResource(R.mipmap.fenlei_pressed); //初次加载Fragment先判断是否为空 if(mFLFragment == null){ mFLFragment = new FLFragment(); //第一次添加到Fragment中 transaction.add(R.id.mFrame,mFLFragment); }else{ //以后的每一次只需要显示即可 transaction.show(mFLFragment); } break; case RM: mRMTv.setTextColor(getResources().getColor(R.color.pressed)); mRMIBtn.setBackgroundResource(R.mipmap.remen_pressed); if(mRMFragment == null){ mRMFragment = new RMFragment(); transaction.add(R.id.mFrame,mRMFragment); }else{ transaction.show(mRMFragment); } break; case WD: mWDTv.setTextColor(getResources().getColor(R.color.pressed)); mWDIBtn.setBackgroundResource(R.mipmap.user_pressed); if(mWDFragment == null){ mWDFragment = new WDFragment(); transaction.add(R.id.mFrame,mWDFragment); }else{ transaction.show(mWDFragment); } break; case ZN: mZNTv.setTextColor(getResources().getColor(R.color.pressed)); mZNIBtn.setBackgroundResource(R.mipmap.zhinan_pressed); if(mZNFragment == null){ mZNFragment = new ZNFragment(); transaction.add(R.id.mFrame,mZNFragment); }else{ transaction.show(mZNFragment); } break; } //最后记得提交 transaction.commit(); } }
fragment_base.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/BaseTvTitle" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" /> </FrameLayout>
activity_main.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" > <include layout="@layout/top_bar" android:id="@+id/mTopBar"/> <FrameLayout android:id="@+id/mFrame" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_below="@+id/mTopBar" > </FrameLayout> <include layout="@layout/foot_bar" android:id="@+id/mFootBar" /> </LinearLayout>
foot_bar.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="65dp" android:orientation="vertical"> <!--线条灰色线条--> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@drawable/line" /> <LinearLayout android:id="@+id/mFootBar" android:layout_width="match_parent" android:layout_height="65dp" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal"> <LinearLayout android:id="@+id/mLinZN" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/mBtnZN" android:layout_width="25dp" android:layout_height="25dp" android:background="@mipmap/zhinan_pressed" android:button="@null" android:clickable="false" /> <TextView android:id="@+id/mTvZhiNan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="指南" android:textColor="#eb4f38" /> </LinearLayout> <LinearLayout android:id="@+id/mLinReMen" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/mBtnRM" android:layout_width="25dp" android:layout_height="25dp" android:background="@mipmap/remen_normal" android:clickable="false" /> <TextView android:id="@+id/mTvReMen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="热门" /> </LinearLayout> <LinearLayout android:id="@+id/mLinFenLei" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/mBtnFL" android:layout_width="25dp" android:layout_height="25dp" android:background="@mipmap/fenlei_normal" android:clickable="false" /> <TextView android:id="@+id/mTvFenLei" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="分类" /> </LinearLayout> <LinearLayout android:id="@+id/mLinUser" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/mBtnWD" android:layout_width="25dp" android:layout_height="25dp" android:background="@mipmap/user_normal" android:clickable="false" /> <TextView android:id="@+id/mTvUser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="我的" /> </LinearLayout> </LinearLayout> </LinearLayout>
top_bar.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="50dp" android:orientation="horizontal" android:background="#FF2D47" > <ImageButton android:layout_width="28dp" android:layout_height="28dp" android:background="@mipmap/shape1" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="礼物说" android:textSize="25sp" android:textColor="#ffffff" android:gravity="center" android:layout_gravity="center" /> <ImageButton android:layout_width="30dp" android:layout_height="30dp" android:background="@mipmap/search" android:layout_gravity="center" android:layout_marginRight="10dp" /> </LinearLayout>
具体的代码就已经完成了,这里的切换只能通过手动点击下面的标签进行切换,在接下来的学习中我们还会实现一个模仿微信的界面切换,他是可以通过点击选择切换,也可以选择滑动界面进行切换点击+滑动切换界面;如果需要该Demo源码的请点击源码下载,里面有所有图标的资源。
相关文章推荐
- Android之Fragment+ViewPager实现点击+滑动界面切换学习笔记
- Android个人学习笔记-底部导航切换Fragment的实现
- android 开发零起步学习笔记(十三):Android 实现多页界面左右滑动切换效果
- Android Fragment学习笔记(二)----Fragment界面添加和管理
- android学习——实现欢迎界面图片动画滑动切换
- Android开发学习笔记(六):最简单的办法实现APP欢迎界面
- [Android] 使用 Fragment 实现底部 Tab 切换界面
- android 开发零起步学习笔记(十一):界面切换+几种常用界面切换效果
- Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换
- Android开发学习笔记(十)实现一个简易的开场界面
- Android仿微信界面--使用FragmentPagerAdapter,viewpager实现(慕课网笔记)
- 基于android的网络音乐播放器-添加viewpager和fragment实现滑动切换多个界面(二)
- Fragment实现android的设置界面切换效果
- Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换
- Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现
- Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换
- Android仿微信界面--使用Fragment实现(慕课网笔记)