zoukankan      html  css  js  c++  java
  • (推荐)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>
  • 相关阅读:
    常见排序算法总结(一)
    27.移除元素
    556. 下一个更大元素 III
    503. 下一个更大元素 II
    496.下一个更大元素Ⅰ
    汇编基础
    SQL回顾
    Pandas整理
    爬取中公网新闻时政
    Python合并Excel表格
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/9225661.html
Copyright © 2011-2022 走看看