pro android学习笔记,【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版...

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

744c247fc30f42ecb4ad44f1bf176b3b.png

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

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

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

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal" >

android:id="@+id/titles"

android:layout_width="match_parent"

android:layout_height="match_parent" />

对于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学习笔记(十九):用户界面和控制(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片段     

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方式 &amp&semi; PopUp菜单

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

随机推荐

UWP开发-二维变换以及三维变换

在开发中,由于某些需求,我们可能需要做一些平移,缩放,旋转甚至三维变换,所以我来讲讲在UWP中这些变换的实现方法. 一. 二维变换: UIElement.RenderTransform a.Trans ...

Win7路由器设置过程

随着应用win7系统的人越来越多,对于这个系统的应用就更多了,其中大家最关注的就是这个系统和路由器上网的问题.下面,我们就来讲解一下win7系统的路由器的设置过程. 首先打开浏览器,在地址栏输入192 ...

Linux下GPIO驱动(三) ----gpio&lowbar;desc&lpar;&rpar;的分析

上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...

关于Debug下的Log打印问题

在项目中为了调试经常会用到Log打印,比如打印当前方法__func__, 对象,地址等等,所以项目最后每次运行调试控制台满满的都是打印日志,到release发布的时候,显然不太合适,这里其实可以用一个 ...

html-----005

TF-8"> & ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值