【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
对于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):适应不同屏幕或排版的更多相关文章
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- 【转】Pro Android学习笔记(十):了解Intent(上)
目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...
- 【转】Pro Android学习笔记(十六):用户界面和控制(4):ImageView控件
目录(?)[-] XML片段 代码设置ImageView ImageView是基础的控件,它是android.widget.ImageView的继承类. XML片段 <LinearLa ...
- Android学习笔记四十Preference使用
Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...
- 【转】Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView
目录(?)[-] SimpleCursorAdapter 系统预置的layout ArrayAdapter 动态数据增插删排序 自定义TextView风格 其他Adapter AdapterView不 ...
- 【转】Pro Android学习笔记(十五):用户界面和控制(3):Button控件
目录(?)[-] 基础Button ImageButton ToggleButton CheckBox RadioButton 基础Button Button是最常用的基础控件之一,在Android中 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
随机推荐
- less (css预处理)
用法 1. 必须在head内 2. 样式文件必须先加载 <head> <meta charset='utf-8'> <link rel="stylesheet/ ...
- 我的Android进阶之旅------>对Android开发者有益的40条优化建议
下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...
- python实例3-天气小模块
调用中国天气的一小段代码,抓取 #! /usr/bin/python # coding = utf-8 # ToDo: get weather info from weather.com.cn # A ...
- ceph基本架构简述
1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...
- Yii2数据库操作的各种写法
-------------------------------ActiveRecord---------------------------------------- 查询: // find the ...
- 运行vo总结
这是基于之前的vo类做的.vo类总结.note参数文件的直接设置在config目录下,比如是default.yaml文件,里面会定义dataset_dir,cmera类的fx,fy,cx,cy,Vis ...
- HDFS常见问题
在HDFS里面,data node上的块大小默认是64MB(或者是128MB或256MB) 问题: 为什么64MB(或128MB或256MB)是最优选择? 为什么不能远少于64MB(或128MB或25 ...
- ATI AMD
AMD是一个CPU公司,而ATI是一个显卡公司.在2006年7月24日,AMD公司将ATI公司百分之百收购了,也自然和AMD结为一体,也生产显卡了.它们的区别如下1:它们生产的物品不同,AMD生产处理 ...
- LINQ 学习路程 -- 查询操作 Quantifier Operators All Any Contain
Operator Description All 判断所有的元素是否满足条件 Any 判断存在一个元素满足条件 Contain 判断是否包含元素 IList<Student> studen ...
- oracle 从select的结果update其他表
update a set a.id=(selelct b.id from temp b where b.line = a.line) where a.line = (select line from ...