我的长大app开发教程第一弹:Fragment布局

在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用。

在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准确点说是一个资讯+社交的校园app。目标用户是在校大学生,老师。项目初期提供的功能有:校园资讯,校园服务,校园问答,核心的社交功能会在稍后视情况推出。我们的竞争对手有微信,QQ,空间,微博,知乎。。。等杀手级应用,所以我们压力还是有点大,但是,还有机会(逃。。。当我没说。

具体的产品构思和运营方案会在项目后期发布。。。

现如今,有人说移动互联网已死,接下来是AI的时代,或者更准确的说移动互联网的红利期已经过去,下一个经济爆发点在AI领域。。

先不说我们能否准确的揣测这个时代的发展,但是有些现象很真实:从2015下到2016开始,Android低端程序员过剩,app的装机量已经停滞不前,App的推广成本越来越高,微信微博等巨头把控着移动端的流量入口,资本热度逐渐退去,初创公司融资困难,移动端的寒潮来临。2000年PC互联网泡沫,08年全球金融危机,随后几年移动互联网蓬勃发展,这几年移动遇冷,资本市场疲惫,创业越来越难,无独有偶,近年来大数据和人工智能又大行其道。。。不由得开始思考,这种种背后是技术的必然发展,还是资本的时代博弈。。。编不下去了。。。逃。。

下面开始正题。。。

我使用的开发工具是Android Studio 2.3.3

工程结构:

我的长大app开发教程第一弹:Fragment布局_第1张图片

最终达到的效果:侧滑功能使用了第三方库SlidingMenu,可以自行在github下载,也可以直接copy我的(https://github.com/Vito-Yan/MYangtzeu)

我的长大app开发教程第一弹:Fragment布局_第2张图片

具体的实现步骤:

1、MainActivity继承我们的第三方框架SlidingFragmentActivity,这个类是程序的入口,重写了onCreate方法,初始化SlidingMenu方法和Fragement方法

package com.vitoyan.myangtzeu.activity;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.DisplayMetrics;
import android.view.Window;

import com.vitoyan.myangtzeu.R;
import com.vitoyan.myangtzeu.fragment.LeftmenuFragment;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.vitoyan.myangtzeu.fragment.ContentFragment;


public class MainActivity extends SlidingFragmentActivity {
    private int screeWidth;
    private int screeHeight;

    public static final String MAIN_CONTENT_TAG = "main_content_tag";
    public static final String LEFTMENU_TAG = "leftmenu_tag";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);//设置没有标题
        super.onCreate(savedInstanceState);
        initSlidingMenu();
        //初始化Fragment
        initFragment();

    }

    private void initSlidingMenu() {
        //1.设置主页面
        setContentView(R.layout.activity_main);

        //2.设置左侧菜单
        setBehindContentView(R.layout.activity_leftmenu);


        //3.设置右侧菜单
        SlidingMenu slidingMenu = getSlidingMenu();
//        slidingMenu.setSecondaryMenu(R.layout.activity_rightmenu);//设置右侧菜单

        //4.设置显示的模式:左侧菜单+主页,左侧菜单+主页面+右侧菜单;主页面+右侧菜单
        slidingMenu.setMode(SlidingMenu.LEFT);

        //5.设置滑动模式:滑动边缘,全屏滑动,不可以滑动
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

        DisplayMetrics outmetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(outmetrics);
        screeWidth = outmetrics.widthPixels;
        screeHeight = outmetrics.heightPixels;
        //6.设置主页占据的宽度
//        slidingMenu.setBehindOffset(DensityUtil.dip2px(MainActivity.this, 200));
        slidingMenu.setBehindOffset((int) (screeWidth*0.625));
    }

    private void initFragment() {
        //1.得到FragmentManger
        FragmentManager fm = getSupportFragmentManager();
        //2.开启事务
        FragmentTransaction ft= fm.beginTransaction();
        //3.替换
        ft.replace(R.id.fl_main_content,new ContentFragment(), MAIN_CONTENT_TAG);//主页
        ft.replace(R.id.fl_leftmenu, new LeftmenuFragment(), LEFTMENU_TAG);//左侧菜单
        //4.提交
        ft.commit();

//        getSupportFragmentManager().beginTransaction().replace(R.id.fl_main_content,new ContentFragment(), MAIN_CONTENT_TAG).replace(R.id.fl_leftmenu,new LeftmenuFragment(), LEFTMENU_TAG).commit();



    }

}

2、BaseFragment:初始化视图和数据的基本类

package com.vitoyan.myangtzeu.base;

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

/**
 * 作者:Vito-Yan
 * 作用:基本的Fragment,LeftMenuFragment和ContentFragment将继承它
 */
public abstract class BaseFragment extends Fragment {


    public Activity context;//MainActivity


    /**
     * 当Fragment被创建的时候回调这个方法
     * @param savedInstanceState
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getActivity();
    }

    /**
     * 当视图被创建的时候回调
     * @param inflater
     * @param container
     * @param savedInstanceState
     * 创建了视图
     * @return
     */
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return initView();
    }

    /**
     * 让孩子实现自己的视图,达到自己特有的效果
     * @return
     */
    public abstract View initView() ;
    /**
     * 当Activity被创建之后被回调
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initData();
    }

    /**
     * 1.如果自页面没有数据,联网请求数据,并且绑定到initView初始化的视图上
     * 2.绑定到initView初始化的视图上
     */
    public void initData() {

    }
}

3、ContentFragment:正文 Fragment,重写了initView和initData

package com.vitoyan.myangtzeu.fragment;

import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;

import com.vitoyan.myangtzeu.base.BaseFragment;
import com.vitoyan.myangtzeu.utils.LogUtil;

/**
 * 作者:Vito-Yan
 * 作用:正文Fragment
 */
public class ContentFragment extends BaseFragment {

    private TextView textView;

    @Override
    public View initView() {
        LogUtil.e("正文视图被初始化了");
        textView = new TextView(context);
        textView.setTextSize(23);
        textView.setGravity(Gravity.CENTER);
        textView.setTextColor(Color.BLACK);
        return textView;
    }

    @Override
    public void initData() {
        super.initData();
        LogUtil.e("正文数据被初始化了");
        textView.setText("正文页面");
    }

}

4、LeftmenuFragment:左侧菜单的Fragment,继承自BaseFrament,重写了initView和initData

package com.vitoyan.myangtzeu.fragment;

import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;

import com.vitoyan.myangtzeu.base.BaseFragment;
import com.vitoyan.myangtzeu.utils.LogUtil;

/**
 * 作者:Vito-Yan
 * 作用:左侧菜单的Fragment
 */

public class LeftmenuFragment extends BaseFragment {

    private TextView textView;


    @Override
    public View initView() {
        LogUtil.e("左侧菜单视图被初始化了");
        textView = new TextView(context);
        textView.setTextSize(23);
        textView.setGravity(Gravity.CENTER);
        textView.setTextColor(Color.WHITE);
        return textView;
    }

    @Override
    public void initData() {
        super.initData();
        LogUtil.e("左侧菜单数据被初始化了");
        textView.setText("左侧菜单页面");
    }
}

5、LogUtil日志工具类

6、build.gradle:在引入别人项目后注意SDK编译版本的一致性。。。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.1'
    defaultConfig {
        applicationId "com.vitoyan.myangtzeu"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile project(':SlidingMenu_library')
}

AndroidManifest.xml还有Layout布局可以在我的github上查看

我的长大app开发教程第一弹:Fragment布局,到此结束。

转载于:https://www.cnblogs.com/Vito-Yan/p/7897052.html

你可能感兴趣的:(我的长大app开发教程第一弹:Fragment布局)