目录(?)[-]

  1. 设置横排和竖排的不同排版风格
  2. 改写代码

对于fragment,经常涉及不同屏幕尺寸和不同的排版风格。我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖排时,如下图显示:

屏幕上只显示一个fragment,点击列表上的数目,进入到简介的activity。下面介绍实现的方式。

设置横排和竖排的不同排版风格

在 Pro Android学习笔记(四):了解Android资源(下)的“资源和配置的变更”中,我们介绍了如何同资源文件夹名设置不同资源。缺省的layout/fragment_basic.xml,设置为竖排格式,只含有1个fragment,如下

<?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="horizontal" > 
    <fragment class="com.wei.flowingflying.pro.ProFragment.TitleFragment" 
        android:id="@+id/titles"         
        android:layout_width="match_parent" 
        android:layout_height="match_parent" /> 
</LinearLayout>

对于layout-land/fragment_basic.xml,即横排的格式,即原小例子的xml文件,含有2个fragment,这里不再重复。

改写代码

在Activity中,通过setContentView(),根据xml中fragment的class属性,自动调用TitleFragment,在TitleFragment中通过调用acitivity的showDetail(int index),来具体显示书的简介。

private int mCurCheckPosition = -1;

原来设置0,现在该为-1,目的是区分是用户互动选择书目录,还是在横屏是缺省显示的书目简介的序号。

对于FragmentBasicTest,也进行一些修改,具体如下:

public class FragmentBasicTest extends Activity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        setContentView(R.layout.fragment_basic); 
    } 
    //判断是否需要显示多个fragment 
    private boolean isMultPane(){ 
        return getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
    } 
    
    public void showDetails(int index){ 
        if(isMultPane()){  //显示左右两个fragement时,代码不变 
            if(index < 0 ) 
                index = 0; 
            DetailFragment detail = (DetailFragment)getFragmentManager().findFragmentById(R.id.details);
            if(detail == null){ 
                addFirstFragment(index); 
            }else if(detail.getShowIndex() != index ){ 
                addFragmentToStack(index); 
            } 
        }else{  //只显示一个fragment时,唤起显示简介内容的Activity的
            if(index < 0) 
                return; 
            Intent intent = new Intent(); 
            intent.setClass(this, DetailActivity.class); 
            intent.putExtra("index",index); 
            startActivity(intent); 
        } 
    } 
   …… 
}

DetailActivity可以用xml设置具体的的布局,向普通的activity那样,将书简介内容呈现而用户。但是,我们已经有了相关显示处理的DetailFragment,我们应该充分利用,以保证代码的一致性。

public class DetailActivity extends Activity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);

//当用户从竖屏模式切换到横屏,检测到模式为横屏是,退出activity,退到上一个activity中,显示横屏的双fragment。否则我们只会看到这个activity转向。
         if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ){
            finish();
            return;
        }
        
        Intent intent = getIntent(); 
        if(intent == null){ 
            finish(); 
            return; 
        } 
        //在Acitvity中加入DetailFragment 
        DetailFragment detail = DetailFragment.newInstance(intent.getExtras());
        getFragmentManager().beginTransaction() 
           .add(android.R.id.content, detail)   //android.R.id.content是activity的top-level的view容器,将fragment与之关联即可。
            .commit();        
    }

}

在FragmentTransaction的add(int containerViewID, Fragment fragment)中,容器ID使用了android.R.id.content,这将获得view的根元素(root element of a view)。

本博文涉及的例子代码,可以在Pro Android学习:Fragment中下载。

相关链接: 我的Android开发相关文章

【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版的更多相关文章

  1. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  2. 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制

    目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...

  3. 【转】Pro Android学习笔记(十二):了解Intent(下)

    解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...

  4. 【转】Pro Android学习笔记(十):了解Intent(上)

    目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...

  5. 【转】Pro Android学习笔记(十六):用户界面和控制(4):ImageView控件

    目录(?)[-] XML片段 代码设置ImageView ImageView是基础的控件,它是android.widget.ImageView的继承类. XML片段      <LinearLa ...

  6. Android学习笔记四十Preference使用

    Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...

  7. 【转】Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView

    目录(?)[-] SimpleCursorAdapter 系统预置的layout ArrayAdapter 动态数据增插删排序 自定义TextView风格 其他Adapter AdapterView不 ...

  8. 【转】Pro Android学习笔记(十五):用户界面和控制(3):Button控件

    目录(?)[-] 基础Button ImageButton ToggleButton CheckBox RadioButton 基础Button Button是最常用的基础控件之一,在Android中 ...

  9. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  10. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

随机推荐

  1. Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks

    Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks S. Chen, C. F. N. Cow ...

  2. Js编写的菜单树

    只需要提供这种JSON格式就ok了 其他的都可以直接引用这个代码进去 var testMenu=[ { "name": "一级菜单", "submen ...

  3. SMARTFORMS自定义打印格式

    [转自 http://lz357502668.blog.163.com/blog/static/16496743201272155135570/] 在sap的打印开发中经常需要自定义纸张,具体步骤如下 ...

  4. Data Structure Binary Tree: Convert a given Binary Tree to Doubly Linked List

    http://www.geeksforgeeks.org/in-place-convert-a-given-binary-tree-to-doubly-linked-list/ #include &l ...

  5. Data Structure Binary Tree: Boundary Traversal of binary tree

    http://www.geeksforgeeks.org/boundary-traversal-of-binary-tree/ #include <iostream> #include & ...

  6. css 分析

    .important.warning {background:silver;} .important .warning {background:silver;} //上面有什么区别? //1.2个选择 ...

  7. python编写脚本应用实例

    这里主要记录工作中应用python编写脚本的实例.由于shell脚本操作数据库(增.删.改.查)并不是十分直观方便,故这里采用python监控mysql状态,然后将状态保存到数据库中,供前台页面进行调 ...

  8. 从输入url到浏览器呈现网页发生了什么?

    大致能分成两个部分:网络通信与页面渲染 一.网络通信 互联网各个网络设备间的通信均基于TCP/IP协议,此协议将整个过程进行分层,由上至下分别为: 应用层.传输层.网络层和数据链路层 1.输入URL ...

  9. window.onload 添加多个函数绑定

    window.onload = function(){alert(2)} function addEvent (fun) { var old = window.onload; if(typeof ol ...

  10. 图数据库Neo4j简介

    图数据库Neo4j简介 转自: 图形数据库Neo4J简介 - loveis715 - 博客园https://www.cnblogs.com/loveis715/p/5277051.html 最近我在用 ...