«

FrameLayout(框架布局)

时间:2024-3-2 19:37     作者:韩俊     分类: Android


框架布局是最简单的布局形式。所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。

一般会在首页+滑动菜单(SlidingMenu)结合的时候使用

效果:



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fl_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

</FrameLayout>

MainActivity

package com.practice.briefer;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.app.FragmentTransaction;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.practice.briefer.fragment.ContentFragment;
import com.practice.briefer.fragment.LeftMenuFragment;

/**
 * 主页面
 * 
 * @author ZST 继承第三方插件Library(SlidingMenu)
 */
public class MainActivity extends SlidingFragmentActivity {

    private static final String FRAGMENT_LEFT_MENU = "fragment_left_menu";
    private static final String FRAGMENT_CONTENT = "fragment_content";

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

        setContentView(R.layout.activity_main);

        setBehindContentView(R.layout.left_menu);//设置侧边栏menu
        SlidingMenu slidingMenu = getSlidingMenu();//获取侧边栏对象
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置全屏触摸
        slidingMenu.setBehindOffset(200);//设置预留屏幕的宽度

        initFragment();
    }

    /**
     * 初始化fragment,将fragment数据填充给布局文件
     */
    private void initFragment() {

        FragmentManager fm = getSupportFragmentManager();//如果要用一个fragment通常要拿到一个fragment控制文件
        FragmentTransaction transaction = fm.beginTransaction();//开启事务

        transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(), FRAGMENT_LEFT_MENU);//前面是一个布局文件,用后面的那个fragment来替换,最后一个是tag标记,方便以后查找使用Fragment LeftMenuFragment = fm.findFragmentByTag(FRAGMENT_CONTENT);
        transaction.replace(R.id.fl_content, new ContentFragment(), FRAGMENT_CONTENT);//用fragment替换fragmentayout

        transaction.commit();//提交事务
        //Fragment leftMenuFragment = fm.findFragmentByTag(FRAGMENT_CONTENT);

    }

}


BaseFragment.java

package com.practice.briefer.fragment;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * fragment基类
 * 
 * @author ZST fragment有自己的生命周期,实现其生命周期的各种方法
 *         这个是基类的fragment,是基础的fragment,控制侧边栏和主页等的子类的fragment
 *
 */
public abstract class BaseFragment extends Fragment {

    public Activity myActivity;

    // fragment创建
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myActivity = getActivity();
    }

    // 处理fragment的布局,这个是基类的布局,让子类的布局实现view
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return initViews();
    }

    // 依附于activity的创建完成
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        initData();// 界面创建完成了,view已经画完了,则可以初始化一下页面数据
    }

    // 必须让孩子实现,可以搞成抽象的类
    public abstract View initViews();

    // 初始化数据。因为子类加载页面会有很多的数据,如果是静态的,可以不实现
    public void initData() {

    }

}


ContentFragment.java

package com.practice.briefer.fragment;

import com.practice.briefer.R;

import android.view.View;

public class ContentFragment extends BaseFragment {

    @Override
    public View initViews() {

        View view = View.inflate(myActivity, R.layout.fragment_content, null);
        return view;
    }

}




fragment_content.xml

<?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" >

    <!-- fragment_left_menu -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是fragment_主页面页面" />

</LinearLayout>



类之间的关系和作用在印象笔记。

标签: android

热门推荐