FrameLayout和Fragment处理Android应用UI布局实例

将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment :

1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity:

  public class MainActivity extends FragmentActivity{
    ..........
  }

2.主Activity的layout(xml文件)中建立多个Frame并定义其Android:id="@+id/XXX"
3.主Activity内操作函数中,由查找id来对这些FrameLayout进行Activity填充:
   添加语句如下

代码如下:

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container2,new NullFrag()).commit();

取得支持Fragment管理()->开始交易()->添加(frame的id , Fragment).交付(); 
   替换语句如下
   getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container2,new NullFrag()).commit();
   取得支持Fragment管理()->开始交易()->替代(frame的id , Fragment).交付();
例:

代码如下:

public void click_btn_flag02(View view){
         getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container2,new MidFrag()).commit();
    }

注:函数参数要用View

下面我们来看实例:


效果图的左边是一个列表,右边是列表item的详情。
先看一下布局文件(layout):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <fragment
  class="com.fragment.main.TitlesFragment"
  android:id="@+id/titles" android:layout_weight="1"
  android:layout_width="0px" android:layout_height="match_parent" />
 <FrameLayout android:id="@+id/details" android:layout_weight="1"
  android:layout_width="0px" android:layout_height="match_parent"
  android:background="?android:attr/detailsElementBackground" />
</LinearLayout>

布局文件中使用了fragment标签和FrameLayout标签。Android Fragment使用 中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体view。
        看一下程序实现(com.fragment.main.TitlesFragment):

public class TitlesFragment extends ListFragment { 

 int mCurCheckPosition = 0;
 int mShownCheckPosition = -1; 

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState); 

  setListAdapter(new ArrayAdapter<String>(getActivity(),
    android.R.layout.simple_list_item_activated_1,
    Shakespeare.TITLES)); //使用静态数组填充列表
  if (savedInstanceState != null) {
   mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
   mShownCheckPosition = savedInstanceState.getInt("shownChoice", -1);
  }
   getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
   showDetails(mCurCheckPosition);
 } 

 @Override
 public void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState); 

  outState.putInt("curChoice", mCurCheckPosition);
  outState.putInt("shownChoice", mShownCheckPosition);
 } 

 @Override
 public void onListItemClick(ListView l, View v, int position, long id) {
  showDetails(position);
 } 

 /**
  *显示listview item 详情
  */
 void showDetails(int index) {
  mCurCheckPosition = index;
   getListView().setItemChecked(index, true); 

   if (mShownCheckPosition != mCurCheckPosition) { 

    DetailsFragment df = DetailsFragment.newInstance(index);
    FragmentTransaction ft = getFragmentManager()
      .beginTransaction();
    ft.replace(R.id.details, df);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();
    mShownCheckPosition = index;
   }
 } 

}

TitlesFragment
TitlesFragment继承自Fragment的子类ListFragment,使用了一个静态数组填充列表,重写了onListItemClick方法,showDetails方法展示ListView item的详情。

DetailsFragment df = DetailsFragment.newInstance(index);//获取详情Fragment的实例
FragmentTransaction ft = getFragmentManager().beginTransaction();//获取FragmentTransaction 实例
ft.replace(R.id.details, df); //使用DetailsFragment 的实例
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();//提交

看一下DetailsFragment :

public class DetailsFragment extends Fragment { 

 /**  * Create a new instance of DetailsFragment, initialized to  * show the text at 'index'.  */
 public static DetailsFragment newInstance(int index) {
  DetailsFragment f = new DetailsFragment();
  // Supply index input as an argument.
  Bundle args = new Bundle();
  args.putInt("index", index);
  f.setArguments(args);
  return f;
 } 

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  if (container == null) {
   return null;
  }
  ScrollView scroller = new ScrollView(getActivity());
  TextView text = new TextView(getActivity()); 

  int padding = (int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources()
      .getDisplayMetrics());
  text.setPadding(padding, padding, padding, padding);
  scroller.addView(text);
  text.setText(Shakespeare.DIALOGUE[getArguments().getInt("index", 0)]);
  return scroller;
 }
}

DetailsFragment 中使用newInstance(int index)方法产生DetailsFragment 实例并接受整型参数,重载了onCreateView方法创建view。

(0)

相关推荐

  • 基于AnDroid FrameLayout的使用详解

    今天在学习实现墨迹天气那样的拖动效果时,看到用的是重写FrameLayout.翻了翻书,突然想明白,为什么用FrameLayout.在FrameLayout中,用我看的书中的话说是,空间永远用不完. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><FrameLayout    xmlns:android="http://schemas.android.com/apk/res/androi

  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享

    如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 复制代码 代码如下: public class MyView2 extends View{ public MyView2(Context context,AttributeSet att) {super(context,att); } public void onDraw(Canvas c) { // 这里绘制你要的内容 } } 2.定义布局文件 复制代码

  • Android布局之FrameLayout帧布局

    前言 作为android六大布局中最为简单的布局之一,该布局直接在屏幕上开辟出了一块空白区域, 当我们往里面添加组件的时候,所有的组件都会放置于这块区域的左上角; 帧布局的大小由子控件中最大的子控件决定,如果都组件都一样大的话,同一时刻就只能能看到最上面的那个组件了! 当然我们也可以为组件添加layout_gravity属性,从而制定组件的对其方式 帧布局在游戏开发方面用的比较多,等下后面会给大家演示一下比较有意思的两个实例 (-)帧布局简介 帧布局容器为每个加入的其中的组件创建一个空白的区域称

  • Android入门之RelativeLayout、FrameLayout用法分析

    本文讲述的是Android中RelativeLayout.FrameLayout的用法.具体如下: RelativeLayout是一个按照相对位置排列的布局,跟AbsoluteLayout这个绝对坐标布局是个相反的理解. 在RelativeLayout布局里的控件包含丰富的排列属性: Layout above:选择ID A,则该控件在A控件的上方, Layout below.Layout to left of.等同样用法.使用 RelativeLayout布局的时候,最好在界面设计时 做好布局,

  • Android布局之帧布局FrameLayout详解

    FrameLayout 在这个布局中,所有的子元素都不能被指定放置的位置,他们统统防御这块区域的左上角, 并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡. 用途 常用于进度条的表示 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" a

  • Android下拉刷新PtrFrameLayout的使用实例代码

    1.介绍: 可以包含所有的控件 :ListView, GridView, ScrollView, FrameLayout, 甚至 TextView. 可以自定义刷新头(这点非常实用) 使用简单方便 不足就是不支持上拉加载. 2.使用 首先添加依赖到项目 compile 'in.srain.cube:ultra-ptr:1.0.11' 在Xml中使用 <in.srain.cube.views.ptr.PtrFrameLayout xmlns:android="http://schemas.a

  • 简析Android五大布局(LinearLayout、FrameLayout、RelativeLayout等)

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLayout(线性布局).FrameLayout(单帧布局).RelativeLayout(相对布局).AbsoluteLayout(绝对布局)和TableLayout(表格布局). 布局一:LinearLayout LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元

  • Android常用布局(FrameLayout、LinearLayout、RelativeLayout)详解

    很多开发者一听说Android终端的屏幕尺寸五花八门,屏幕分辨率千奇百怪,就觉得Android开发在屏幕适配方面是必定是一件头疼的事情.因为在Android问世之前,广大开发者知道的UI解决方案大致分为两类: 1.在Web开发中的CSS,一层一层的去层叠样式. 2.在iOS开发中去计算每一个UIView的尺寸. 上面两种方案,无论哪种方案面对碎片化严重的Android终端,那都是一场噩梦.好在Android提供了另一套解决方案来应对严重的终端碎片化,这就是布局和9-patch. 这里想来说说布局

  • FrameLayout和Fragment处理Android应用UI布局实例

    将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment : 1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity: public class MainActivity extends FragmentActivity{ .......... } 2.主Activity的layout(xml文件)中建立多个Frame并定义其And

  • Android 动态改变布局实例详解

    Android 动态改变布局                最近项目需求,动态的改变布局,为了增加客户体验,尤其是在输入框出现小键盘的时候,为了避免小键盘遮挡APP内容就需要动态改变布局: 先看下实现效果图: 其实是一个软件的登录界面,初始是第一个图的样子,当软键盘弹出后变为第二个图的样子,因为登录界面有用户名.密码.登录按钮,不这样的话软键盘弹出后会遮住登录按钮(其实之前的实现放到了ScrollView里面,监听软键盘弹出后滚动到底部,软键盘隐藏后滚动到顶部,也是可以的). 最简单的方法就是多

  • 使用Fragment来处理Andoird app的UI布局的实例分享

    Fragment 的出现一方面是为了缓解 Activity 任务过重的问题,另一方面是为了处理在不同屏幕上 UI 组件的布局问题,而且它还提供了一些新的特性(例如 Retainable)来处理一些在 Activity 中比较棘手的问题.Fragment 拥有和 Activity 一致的生命周期,它和 Activity 一样被定义为 Controller 层的类.有过中大型项目开发经验的开发者,应该都会遇到过 Activity 过于臃肿的情况,而 Fragment 的出现就是为了缓解这一状况,可以

  • Android编程UI设计之GridView和ImageView的用法

    本文实例讲述了Android编程UI设计之GridView和ImageView的用法.分享给大家供大家参考,具体如下: GridView: A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view. 简单说,GridView就是我们资源管理器平常见到的一个个文件的icon显示方式. 上面提

  • Android分页中显示出下面翻页的导航栏的布局实例代码

    当页面条目过多的时候需要分页,要在布局中显示出分页的相关布局,使用android:layout_weight="11" activity_call_safe.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:lay

  • Android自定义UI手势密码改进版源码下载

    在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 源码下载:http://xiazai.jb51.net/201610/yuanma/androidLock(jb51.net).rar 先看第一张图片的布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

  • Android碎片fragment实现静态加载的实例代码

    静态加载好后的界面如下,两个碎片分别位于一个活动的左边和右边: 左边和右边分别为一个碎片,这两个碎片正好将一整个活动布满.一个活动当中可以拥有多个碎片,碎片的含义就是可以在同一个UI界面下,将这个界面分成好几个界面,并且可以分别更新自己的状态,如果没有碎片,那么如果你想要单独在某一个区域实现活动的"跳转"就不可能了,因此我们可以引入碎片,这样就可以在这个区域单独进行碎片的跳转.在利用底部标题栏进行首页UI的切换的时候就需要用到碎片,因此碎片在安卓开发当中十分广泛,这篇博客将会与你讲解如

  • Android的UI调优教程

    目录 一.视图的层级分析: <ViewStub> 二.资源缩减 三.屏幕的过度绘制 四.分析卡顿(策略GPU的渲染能力) 五.让它看起来更快 对于一个App的UI而言,在流畅性上的改进目标其实就是降低屏幕绘制的延迟,创建流畅和稳定的帧率以避免卡顿. 在理想情况下,全部的测量.布局和绘制的时间最好在16ms以内,这样才能保证屏幕运行的顺畅性.而如何对屏幕渲染和UI性能进行评估和分析呢,在Android SDK中集成了一些工具用来策略APP的渲染性能问题. 一.视图的层级分析: 对于每一个视图而言

  • Android App中的多个LinearLayout嵌套布局实例解析

    在做android  UI布局时,用了LinearLayout嵌套,发现效果并不如我预料一般 查了下资料,说是要设置layout_weight属性 资料说得不是很清楚,也没仔细看,就去弄,结果越弄越混乱. 于是静下心来,自己写xml测试,发现如下. 如果LinearLayout是最外面的一层,它是不会弹出layout_weight属性的, 换句话说最外层不能用layout_weight xml布局如下 <LinearLayout xmlns:android="http://schemas.

  • 浅谈AnDroidDraw+DroidDraw实现Android程序UI设计的分析说明

    AnDroidDraw 是一个与 DroidDraw 集成的 Android 应用程序,它允许你从 DroidDraw 应用 程序下载你的 GUIs, 也允许你在一个 Android 设备上预览你的 GUIs1.先下载安装DroidDraw,我使用的版本是droiddraw-r1b222.下载AnDroidDraw.apk,并在模拟器上进行安装,安装步骤如下: 1)使用cmd进入命令行窗口,进入你安装的android-sdk下的platform-tools目录,如图: 2)使用: adb ins

随机推荐