目录(?)[-]

  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. spring struts2整合

    把struts2的action交给spring管理 一.导入相应jar包 导入与spring有关的基本jar包,和与struts2有关的基本jar包 还需要导入 struts2-spring整合jar ...

  2. 快照COW

    What is Copy-on-write? Copy-on-write      Copy-on-write (sometimes referred to as "COW") i ...

  3. 跨域与ie浏览器的相关问题

    文章出处url:https://segmentfault.com/a/1190000002647143 产生跨域问题的原因 跨域问题是浏览器同源策略限制,当前域名的js只能读取同域下的窗口属性. 跨域 ...

  4. Python基础(2)_数字和字符串类型

    一.数据类型 1.数字 整型 Python的整型相当于C中的long型,Python中的整数可以用十进制,八进制,十六进制表示. >>> --------->默认十进制 > ...

  5. php输入输出

    php是服务器脚本语言,js是客户端脚本语言 php用表单接收数据,echo 输出数据,$定义变量. <?php echo $_POST["sub"]; // POST后是表 ...

  6. 牛客练习赛13 B 幸运数字Ⅱ 【暴力】【二分】

    题目链接 https://www.nowcoder.com/acm/contest/70/B 思路 没有代码限制 先打表 打出 幸运数字的表 然后 二分查找 第一个 大于 r 的幸运数字 然后 往 L ...

  7. Data Structure Linked List: Write a function to get the intersection point of two Linked Lists.

    http://www.geeksforgeeks.org/write-a-function-to-get-the-intersection-point-of-two-linked-lists/ 第一第 ...

  8. 全屏滚动插件之 fullpage.js

    前言:做移动端网页下滑/点击切换到下一页的效果,采用了fullpage,js最新的版本 https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/3.0.4 ...

  9. stack-铁轨问题

    每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它的车厢可以进行某种形式的重新组合.假设从A方向驶来的火车有n节车厢(n<1000),分别按顺序编号为1,2,...,n.假定在进入车站之前每 ...

  10. 20165101刘天野 2017-2018-2 《Java程序设计》第1周学习总结

    20165101刘天野 2017-2018-2 <Java程序设计>第1周学习总结 教材学习内容总结 Java的地位 Java的特点 安装JDK Java应用程序开发步骤 反编译 安装Gi ...