通过Api可以发现原来使用用于构建普通应用程序的框架的一些类,比如TabActivity,ActivityGroup都已经不推荐使用了,转而替换成Fragment。今天我们就来看看如何使用Fragment来构建应用程序。
底部的BottomBar结合的是之前发出的一篇博客
下面是效果图:
我们再看下工程的目录:
这里对BottomBar就不解释了,主要讲下Fragment相关的。
首先你的界面需要继承自FragmentActivity,在它的布局文件中需要两个控件:
1.
屏幕底部的BottomBar
2.
BottomBar上方的RelativeLayout(用来切换显示各个Fragment)。
接下去你就可以针对每个界面分开写布局和代码了。
注释代码中都有,下面直接上代码:
MainActivity.java
/**
* This demo shows how to use FragmentActivity to build the frame of a common application.
* To replace the deprecated class such as TabActivity, ActivityGroup,and so on.
*
* 这个demo展示了如何使用FragmentActivity来构建应用程序的框架
* 可以使用这个来替代原来的TabActivity,ActivityGroup等等
*
* @author MichaelYe
* @since 2012-9-6
* @see http://developer.android.com/reference/android/app/Fragment.html
* @see http://developer.android.com/training/basics/fragments/index.html
* @see http://developer.android.com/guide/components/fragments.html
* */
public class MainActivity extends FragmentActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final BottomBar bottomBar = (BottomBar)findViewById(R.id.ll_bottom_bar);
bottomBar.setOnItemChangedListener(new OnItemChangedListener()
{
@Override
public void onItemChanged(int index)
{
showDetails(index);
}
});
bottomBar.setSelectedState(0);
// bottomBar.hideIndicate();//这个代码原来控制红色小图标的可见性
// bottomBar.showIndicate(12);
}
private void showDetails(int index)
{
Fragment details = (Fragment)
getSupportFragmentManager().findFragmentById(R.id.details);
switch(index)
{
case 0:
details = new FragmentExecute();
break;
case 1:
details = new FragmentLaunch();
break;
case 2:
details = new FragmentTeam();
break;
case 3:
details = new FragmentSearch();
break;
case 4:
details = new FragmentSetting();
break;
}
// Execute a transaction, replacing any existing
// fragment with this one inside the frame.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
// ft.addToBackStack(null);//这行代码可以返回之前的操作(横屏的情况下,即两边都显示的情况下)
ft.commit();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_login"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/ll_bottom_bar" />
<com.michael.widget.BottomBar
android:id="@+id/ll_bottom_bar"
android:layout_width="fill_parent"
android:layout_height="60dip"
android:layout_alignParentBottom="true" />
</RelativeLayout>
/**
* 需要使用不带参数的构造器,可以使用getActivity()替换context参数
* 否则屏幕在旋转的时候会抛出异常:
* Caused by: java.lang.InstantiationException:
* can't instantiate class com.michael.fragment.FragmentExecute; no empty constructor
*
* @see http://stackoverflow.com/questions/7016632/unable-to-instantiate-fragment
* */
public class FragmentExecute extends Fragment
{
public FragmentExecute()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
if (container == null)
{
// Currently in a layout without a container, so no
// reason to create our view.
return null;
}
LayoutInflater myInflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = myInflater.inflate(R.layout.frag_execute, container, false);
return layout;
}
}
frag_execute.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="fill_parent"
android:layout_height="45dip"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:background="@drawable/bg_title_bar"
android:gravity="center" >
<Button
android:id="@+id/btn_back"
android:layout_width="70dip"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginBottom="5dip"
android:layout_marginLeft="8dip"
android:layout_marginTop="5dip"
android:background="@drawable/title_btn_back_selector"
android:text="@string/workbench_home_page"
android:textColor="@color/title_button_color_gray" />
<Button
android:id="@+id/btn_add"
android:layout_width="70dip"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_marginBottom="5dip"
android:layout_marginRight="8dip"
android:layout_marginTop="5dip"
android:background="@drawable/title_btn_rect_selector"
android:text="@string/workbench_add_task"
android:textColor="@color/title_button_color_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/workbench_title"
android:textColor="@color/title_color_white"
android:textSize="22sp" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="30sp"
android:text="@string/num_0"
/>
</RelativeLayout>
其它的Fragment也可以这样写。
使用Fragment有两个好处:
让手机和平板之间更好的显示,这个你可以参考API;
再就是有回退功能,addToBackStack(null);
加入这个方法,当你按返回键的时候,就可以实现界面的回退了(回到之前的Fragment)。
项目下载地址:
https://github.com/michaelye/DemoFragment
- 大小: 62.2 KB
- 大小: 67.4 KB
分享到:
相关推荐
在Android开发中,构建一个用户友好的界面是至关重要的,`AndroidTabhost+Fragment`的项目框架就是一个典型的实例,它允许开发者创建具有多个视图的多标签应用程序。在这个框架中,`Tabhost`用于管理各个标签,而`...
Fragment管理框架是Android开发中的一个重要话题,特别是在构建大型、复杂的应用程序时。在这个场景下,有效地管理和协调多个Fragment的生命周期及交互变得至关重要。"Fragment Rigger"是一个强大的库,它利用了面向...
总的来说,掌握Activity和Fragment的使用对于Android开发者至关重要,它们是构建可复用、可维护和适应各种屏幕尺寸的应用的基础。通过深入理解Activity和Fragment的生命周期、交互方式以及最佳实践,开发者能够创建...
Fragment,通过Api可以发现原来使用用于构建普通应用程序的框架的一些类,比如TabActivity,ActivityGroup都已经不推荐使用了,转而替换成Fragment。继承FragmentActivity
"Android-一个封装了启动模式的Fragment便捷使用库方便构建单Activity多Fragment轻量级框架"就是一个针对这一需求的开源库,它提供了更方便的方式来管理和控制Fragment的启动模式。 首先,让我们了解Fragment的基本...
在安卓应用开发中,"纯净主框架Fragment"是一种常见的项目构建模式,旨在提供一个简洁、易维护的基础结构,尤其适合新手开发者快速上手。在这个框架中,Fragment是核心组件,它允许开发者在单个活动中展示多个不同的...
Fragment页面框架在Android开发中是不可或缺的一部分,尤其是在构建复杂、多视图的应用程序时。XPage框架,作为这个压缩包中的开源项目,旨在提供一种高效、灵活的方式来管理和切换应用程序中的Fragment。下面将详细...
在Android应用开发中,框架搭建是构建用户界面的基础工作,涉及到如何组织和管理应用程序的不同组件。本教程将详细讲解如何使用`RadioGroup`和`Fragment`来构建一个基本的Android框架,实现上部显示`Fragment`,下部...
"使用Fragment让程序界面一分为多"这个主题主要涉及到如何利用Fragment来构建灵活、可复用的用户界面,尤其在处理大屏幕设备如平板电脑时更为常见。下面将详细阐述Fragment的基本概念、使用场景以及如何在实际项目中...
Fragment框架在Android应用开发中扮演着至关重要的角色,尤其在构建类似QQ、微信这样的大型社交应用的主界面时。Fragment最初引入Android系统是为了支持多屏显示和更好的UI设计,允许开发者将应用程序的用户界面拆分...
在Android应用开发中,Fragment和Activity是两个核心组件,它们共同构建了用户界面。Fragment代表一个可重用的UI部分,而Activity则是程序中的一个窗口,它可以包含一个或多个Fragment。Fragment与Activity之间的...
在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中添加、移除或替换,用于构建可动态变化的复杂用户界面。当我们需要在Fragment内部再使用其他Fragment时,就会涉及到“Fragment嵌套”...
这个框架的设计目标是简化开发过程,让开发者能够更高效地构建具有侧滑菜单功能的应用程序。 首先,我们来详细了解LDrawer。LDrawer通常指的是Left Drawer,即左侧抽屉菜单,这是Android应用设计中常见的交互模式,...
在"fragment开发框架"中,我们主要探讨的是如何有效地利用Fragment来构建动态和模块化的应用程序。 Fragment本质上是一个UI片段,它可以独立于Activity存在,并且可以在多个Activity之间重用。它有自己的生命周期,...
Android应用程序框架是构建Android应用的核心组成部分,它为开发者提供了丰富的工具和组件,使得开发者能够高效地开发出功能丰富、用户体验良好的移动应用。在Android中,MVC(Model-View-Controller)设计模式是一...
在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中添加、删除或替换。结合Calendar(日历)和PopupWindow(弹出窗口)的功能,可以创建一个交互丰富的用户界面,尤其适用于日程管理或者...
在这个"一个简单的activty+4个fragment框架"中,我们将探讨如何构建这样一个基于`Activity`和四个`Fragment`的应用结构。 首先,我们需要了解`Activity`的基本概念。`Activity`是用户与应用程序交互的主要入口点,...
在我们的例子中,这些视图通常由Fragment实例表示,Fragment是Android应用程序中可重用的UI片段。使用ViewPager和Fragment,我们可以轻松地构建一个多页的应用界面,其中每个页面都有自己的独立逻辑和视图。 要实现...
这个“一个简单的activty+4个fragment”的项目旨在展示如何使用一个Activity来承载和协调四个不同的Fragment,从而构建一个基本的应用框架。 首先,Activity是Android应用的核心单元,它代表了用户可见并可交互的...
Android Fragment是Android应用程序开发中的一个核心组件,它在Android 3.0(API级别11)版本被引入,主要用于创建动态且模块化的用户界面。Fragment的设计理念是为了更好地适应多屏幕设备,使得开发者能够将UI的...