(推薦)android 軟件實現架構。

(待續)粗略整理了一下楊廣福的視頻教程,將軟件架構整理以下。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個。ide

由於這兩個方法,在主內容也存在,開始抽取基類,BaseFragment。這樣leftmenuFragment,和contentFragment,繼承這個基類。着這個基類中,添加public 的上下文字段,public Activity content;佈局

重寫onCreateView,返回return initView();而後建立抽象方法initView方法。在onActivityCreated方法中,添加initData()方法,而且建立這個方法,public void initData()。this

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文件裏的佈局代碼刪掉。spa

在mainActivity中,添加initFragment方法,建立initFragment方法code

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>
相關文章
相關標籤/搜索