当前位置:   article > 正文

一个例子来解读Fragment实现横竖屏不同的布局

fragment 横屏与竖屏设计

个人觉得Fragment是一个很灵活的东西,用处很大,特别是在平板上等大屏幕的设备上面用处更大,如果不是很了解Fragment的请看这篇文章http://blog.csdn.net/aomandeshangxiao/article/details/7671533,觉得讲的很详细,不过讲一点,我在在3.0以下的版本不继承Activity,而是继承FragmentActivity,获取FragmentManager用getSupportFragmentManager()代替getFragmentManager().其他的看我推荐的那篇文章就行了,好了,接下来我们先来看看项目的效果(我明明弄得是动态图,怎么没反应呀呀呀)

上面的适合由列表进入详情的情况,我们先看下横竖屏的布局

1.竖屏布局,我们用的是FrameLayout,里面放置两个装Fragment的LinearLayout容器,这样的布局是重点

  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <!-- 装载列表的Fragment 的容器 -->
  6. <LinearLayout
  7. android:id="@+id/list_container"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent">
  10. </LinearLayout>
  11. <!-- 装载详情的Fragment 的容器 -->
  12. <LinearLayout
  13. android:id="@+id/detail_container"
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent">
  16. </LinearLayout>
  17. </FrameLayout>
2.横屏布局就比较简单,我们在res下新建一个layout-land文件夹,里面放置一个和上面同名的layout

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent" >
  5. <!-- 装载列表的Fragment 的容器 -->
  6. <LinearLayout
  7. android:id="@+id/list_container"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent"
  10. android:layout_weight="2">
  11. </LinearLayout>
  12. <!-- 装载详情的Fragment 的容器 -->
  13. <LinearLayout
  14. android:id="@+id/detail_container"
  15. android:layout_width="match_parent"
  16. android:layout_height="match_parent"
  17. android:layout_weight="1">
  18. </LinearLayout>
  19. </LinearLayout>

3.新建一个列表Fragment,直接上代码吧,里面只有一个ListView用来显示列表数据

  1. package com.example.fragmentdemo3;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.res.Configuration;
  5. import android.os.Bundle;
  6. import android.support.v4.app.Fragment;
  7. import android.support.v4.app.FragmentManager;
  8. import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
  9. import android.support.v4.app.FragmentTransaction;
  10. import android.view.LayoutInflater;
  11. import android.view.View;
  12. import android.view.ViewGroup;
  13. import android.widget.AdapterView;
  14. import android.widget.AdapterView.OnItemClickListener;
  15. import android.widget.ArrayAdapter;
  16. import android.widget.ListView;
  17. import android.widget.Toast;
  18. /**
  19. * 列表Fragment
  20. * @author mining
  21. *
  22. */
  23. public class FragmentList extends Fragment {
  24. private List<String> mDataSourceList = new ArrayList<String>();
  25. private List<FragmentTransaction> mBackStackList = new ArrayList<FragmentTransaction>();
  26. @Override
  27. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  28. Bundle savedInstanceState) {
  29. return inflater.inflate(R.layout.fragment_list_layout, container, false);
  30. }
  31. @Override
  32. public void onActivityCreated(Bundle savedInstanceState) {
  33. super.onActivityCreated(savedInstanceState);
  34. //添加数据到ListView
  35. for(int i=0, count=20; i<count; i++){
  36. mDataSourceList.add("列表数据" + i);
  37. }
  38. //列表页面的ListView
  39. ListView listView = (ListView) getActivity().findViewById(R.id.fragment_list);
  40. listView.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, mDataSourceList));
  41. listView.setOnItemClickListener(new OnItemClickListener() {
  42. @Override
  43. public void onItemClick(AdapterView<?> parent, View view,
  44. int position, long id) {
  45. //实例化详情Fragment
  46. Fragment detailFragment = new FragmentDetail();
  47. //从列表页面传递需要的参数到详情页面
  48. Bundle mBundle = new Bundle();
  49. mBundle.putString("arg", mDataSourceList.get(position));
  50. detailFragment.setArguments(mBundle);
  51. final FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
  52. final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
  53. //判断手机的横竖屏
  54. Configuration configuration = getActivity().getResources().getConfiguration();
  55. int ori = configuration.orientation;
  56. fragmentTransaction.replace(R.id.detail_container, detailFragment);
  57. if(ori == configuration.ORIENTATION_PORTRAIT){
  58. fragmentTransaction.addToBackStack(null);
  59. }
  60. fragmentTransaction.commit();
  61. }
  62. });
  63. }
  64. /**
  65. *
  66. * @param msg
  67. */
  68. private void showTost(String msg){
  69. Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
  70. }
  71. }
4.详情Fragment,实战中我们有时候需要从列表中传递参数到详情页面,我这里传递的是列表的显示数据,这里面也是一个ListView

  1. package com.example.fragmentdemo3;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.res.Configuration;
  5. import android.os.Bundle;
  6. import android.support.v4.app.Fragment;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.LinearLayout;
  12. import android.widget.ListView;
  13. /**
  14. * 详情Fragment
  15. * @author mining
  16. *
  17. */
  18. public class FragmentDetail extends Fragment {
  19. @Override
  20. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  21. Bundle savedInstanceState) {
  22. return inflater.inflate(R.layout.fragment_detail_layout, container, false);
  23. }
  24. @Override
  25. public void onActivityCreated(Bundle savedInstanceState) {
  26. super.onActivityCreated(savedInstanceState);
  27. //获取列表传来的参数
  28. Bundle bundle = getArguments();
  29. String date = bundle.getString("arg");
  30. List<String> list = new ArrayList<String>();
  31. for(int i=0, count=20; i<count; i++){
  32. list.add(date);
  33. }
  34. LinearLayout layout = (LinearLayout) getActivity().findViewById(R.id.detail_container);
  35. ListView listView = (ListView) getActivity().findViewById(R.id.fragment_detail);
  36. listView.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, list));
  37. Configuration configuration = getActivity().getResources().getConfiguration();
  38. int ori = configuration.orientation;
  39. }
  40. }
5.然后就是Activity,我们动态加载列表Fragment

  1. package com.example.fragmentdemo3;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.support.v4.app.FragmentActivity;
  5. import android.support.v4.app.FragmentManager;
  6. import android.support.v4.app.FragmentTransaction;
  7. public class MainActivity extends FragmentActivity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. //列表页面需要显示的Fragment
  13. Fragment listFragment = new FragmentList();
  14. FragmentManager fragmentManager = getSupportFragmentManager();
  15. FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
  16. fragmentTransaction.add(R.id.list_container, listFragment);
  17. fragmentTransaction.commit();
  18. }
  19. }
差不多就是那样子吧,7点了,下班了,哈哈!我吧代码上传,有兴趣的朋友可以下载来看看

代码下载


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/373144
推荐阅读
相关标签
  

闽ICP备14008679号