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