android 软件实现架构。

(待续)粗略整理了一下杨广福的视频教程,将软件架构整理如下。

1. 首先引入侧滑菜单,和主内容页面。

侧滑菜单在软件的第一个onCreate里实现注册。并且设置好参数,比如侧滑方式和滑动的像素数。

 

public class MainActivity extends SlidingFragmentActivity {
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);

      //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();
    }

  
}

 

 

2.写侧滑菜单和主内容页面的layout布局文件。并且写这两个布局文件的Fragment文件,,把这两个Fragment的重复的地方,抽象出来,形成基类,抽出两个方法,initView 和 initData。

 开始时添加Fragment(侧滑菜单的),然后重写两个方法,一个是onCreateView ,一个是onActivityCreated,这两个方法,一个是创建视图时,一个是activity创建后。连上默认创建的onCreate方法一共3个。

因为这两个方法,在主内容也存在,开始抽取基类,BaseFragment。这样leftmenuFragment,和contentFragment,继承这个基类。着这个基类中,添加public 的上下文字段,public Activity content;

重写onCreateView,返回return initView();然后创建抽象方法initView方法。在onActivityCreated方法中,添加initData()方法,并且创建这个方法,public void initData()。

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() {

    }
}

 

 

/**
 * 
 * 微信:yangguangfu520
 * QQ号:541433511
 * 作用:左侧菜单的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.RED);
return textview;
}
@Override public void initData() { super.initData();
textview.setText('左侧页面被调用'); LogUtil.e(
"左侧菜单数据被初始化了"); } }

 

 

/**
 * QQ号:541433511
 * 作用:正文Fragment
 */
public class ContentFragment extends BaseFragment {
    private ViewPager viewpager;
private RadioGroup rg_main;
@Override public View initView() { LogUtil.e("正文Fragemnt视图被初始化了"); View view = View.inflate(context, R.layout.content_fragment,null); viewpager= (ViewPager)view.findViewById(R.id.viewpager);
rg_main=(RadioGroup)view.findViewById(R.id.rg_main);

//1.把视图注入到框架中,让ContentFragment.this和View关联起来 // x.view().inject(ContentFragment.this,view); return view; } @Override public void initData() { super.initData(); LogUtil.e("正文Fragment数据被初始化了"); }

 

3.在主文件中,用FragmentManager方法替换之前写好的layout布局文件,这时即可实现初步的侧滑和主内容文件的初步架构。并且将重复显示的layout文件里的布局代码删掉。

在mainActivity中,添加initFragment方法,创建initFragment方法

private void initFragment(){

  FragmentManager fm = getSupportFragmentManager();
  FragmentTransaction ft = fm.beginTransaction();
  
  ft.replace(R.id.fl_main_content,new ContentFragment(),MAIN_CONTENT_TAG);
  ft.replace(R.id.fl_leftmenu,new LeftmenuFragment(),LEFT_MENU_TAG);

  ft.commit();
}

 

4.在主内容页面,实现viewpager和radiogroup。

 

public class ContentFragment extends BaseFragement {

  @Override
  public View initView(){
    View view =  view.inflate(context,R.layout.content_fragment,null);
    return view;
  }

@Override public void initData(){
super.initData();

} }

然后创建R.layout.content_fragment,线性布局,上面是viewpager,高度为0,权重为1 。下面是radiogroup,里面是radiobutton,样式用选择器布局,实现点击后的变色。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="false" android:color="@android:color/white"/>
    <item android:state_checked="true" android:color="@android:color/holo_red_light"/>

</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="false" android:drawable="@drawable/home"/>
    <item android:state_checked="true" android:drawable="@drawable/home_press"/>

</selector>

 

转载于:https://www.cnblogs.com/sdgtxuyong/p/9225661.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值