全屏启动页 activity_launcher <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" tools:context="com.atguigu.android.LauncherActivity"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/atguigu_logo" /> <TextView android:textColor="@android:color/black" android:textSize="20sp" android:layout_centerHorizontal="true" android:layout_below="@id/iv_icon" android:text="尚硅谷Android世界..." android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> 首页标题栏 titlebar <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="@android:color/holo_blue_light" android:gravity="center" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="尚硅谷知识库" android:textColor="@android:color/white" android:textSize="20sp" /> </LinearLayout> tab页面 activity_main
选择器例1
<?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/ic_tab_video"/> <item android:state_checked="true" android:drawable="@drawable/ic_tab_video_press"/> </selector>
bottom_textcolor_drawable_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:color="#363636"/>
<item android:state_checked="true" android:color="#3097FD"/>
</selector>
自定义style
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="bottom_tag_style" > <!-- Customize your theme here. --> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_weight">1</item> <item name="android:button">@android:color/transparent</item> <item name="android:drawablePadding">3dp</item> <item name="android:gravity">center</item> <item name="android:textColor">@drawable/bottom_textcolor_drawable_selector</item> <item name="android:textSize">10sp</item> </style> </resources>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--标题栏--> <include layout="@layout/titlebar" /> <!--FrameLayout--> <FrameLayout android:id="@+id/fl_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <!--底部的RadioGroup--> <RadioGroup android:id="@+id/rg_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#11000000" android:gravity="center_vertical" android:orientation="horizontal" android:padding="5dp"> <RadioButton android:id="@+id/rb_common_frame" style="@style/bottom_tag_style" android:drawableTop="@drawable/rb_common_frame_drawable_selector" android:text="常用框架" /> <RadioButton android:id="@+id/rb_thirdparty" style="@style/bottom_tag_style" android:drawableTop="@drawable/rb_thirdparty_drawable_selector" android:text="第三方" /> <RadioButton android:id="@+id/rb_custom" style="@style/bottom_tag_style" android:drawableTop="@drawable/rb_custom_drawable_selector" android:text="自定义控件" /> <RadioButton android:id="@+id/rb_other" style="@style/bottom_tag_style" android:drawableTop="@drawable/rb_other_drawable_selector" android:text="其他" /> </RadioGroup> </LinearLayout> listview fragment fragment_common_fragmen.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </RelativeLayout>
启动activity public class LauncherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launcher); new Handler().postDelayed(new Runnable() { @Override public void run() { //在主线程中执行 startMainActivity(); } }, 2000); } /** * 启动主页面 */ private void startMainActivity() { Intent intent = new Intent(this,MainActivity.class); startActivity(intent); //关闭当前页面 finish(); } } 首页面 public class MainActivity extends FragmentActivity{ private RadioGroup mRg_main; private List<BaseFragment> mBaseFragment; /** * 选中的Fragment的对应的位置 */ private int position; /** * 上次切换的Fragment */ private Fragment mContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化View initView(); //初始化Fragment initFragment(); //设置RadioGroup的监听 setListener(); } private void setListener() { mRg_main.setOnCheckedChangeListener(new MyOnCheckedChangeListener()); //设置默认选中常用框架 mRg_main.check(R.id.rb_common_frame); } class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.rb_common_frame://常用框架 position = 0; break; case R.id.rb_thirdparty://第三方 position = 1; break; case R.id.rb_custom://自定义 position = 2; break; case R.id.rb_other://其他 position = 3; break; default: position = 0; break; } //根据位置得到对应的Fragment BaseFragment to = getFragment(); //替换 switchFrament(mContent,to); } } /** * * @param from 刚显示的Fragment,马上就要被隐藏了 * @param to 马上要切换到的Fragment,一会要显示 */ private void switchFrament(Fragment from,Fragment to) { if(from != to){ mContent = to; FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); //才切换 //判断有没有被添加 if(!to.isAdded()){ //to没有被添加 //from隐藏 if(from != null){ ft.hide(from); } //添加to if(to != null){ ft.add(R.id.fl_content,to).commit(); } }else{ //to已经被添加 // from隐藏 if(from != null){ ft.hide(from); } //显示to if(to != null){ ft.show(to).commit(); } } } } // private void switchFrament(BaseFragment fragment) { // //1.得到FragmentManger // FragmentManager fm = getSupportFragmentManager(); // //2.开启事务 // FragmentTransaction transaction = fm.beginTransaction(); // //3.替换 // transaction.replace(R.id.fl_content, fragment); // //4.提交事务 // transaction.commit(); // } /** * 根据位置得到对应的Fragment * @return */ private BaseFragment getFragment() { BaseFragment fragment = mBaseFragment.get(position); return fragment; } private void initFragment() { mBaseFragment = new ArrayList<>(); mBaseFragment.add(new CommonFrameFragment());//常用框架Fragment mBaseFragment.add(new ThirdPartyFragment());//第三方Fragment mBaseFragment.add(new CustomFragment());//自定义控件Fragment mBaseFragment.add(new OtherFragment());//其他Fragment } private void initView() { setContentView(R.layout.activity_main); mRg_main = (RadioGroup) findViewById(R.id.rg_main); } }
public abstract class BaseFragment extends Fragment { /** * 上下文 */ protected Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return initView(); } /** * 强制子类重写,实现子类特有的ui * @return */ protected abstract View initView(); @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); } /** * 当孩子需要初始化数据,或者联网请求绑定数据,展示数据的 等等可以重写该方法 */ protected void initData() { } }
public class CommonFrameFragment extends BaseFragment { private ListView mListView; private String[] datas; private CommonFrameFragmentAdapter adapter; private static final String TAG = CommonFrameFragment.class.getSimpleName();//"CommonFrameFragment" @Override protected View initView() { Log.e(TAG,"常用框架Fragment页面被初始化了..."); View view = View.inflate(mContext, R.layout.fragment_common_frame,null); mListView = (ListView) view.findViewById(R.id.listview); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String data = datas[position]; Toast.makeText(mContext, "data=="+data, Toast.LENGTH_SHORT).show(); } }); return view; } @Override protected void initData() { super.initData(); Log.e(TAG, "常用框架Fragment数据被初始化了..."); //准备数据 datas = new String[]{"OKHttp", "xUtils3","Retrofit2","Fresco","Glide","greenDao","RxJava","volley","Gson","FastJson","picasso","evenBus","jcvideoplayer","pulltorefresh","Expandablelistview","UniversalVideoView","....."}; //设置适配器 adapter = new CommonFrameFragmentAdapter(mContext,datas); mListView.setAdapter(adapter); } } public class CustomFragment extends BaseFragment { private static final String TAG = CustomFragment.class.getSimpleName();//"CommonFrameFragment" private TextView textView; @Override protected View initView() { Log.e(TAG,"自定义Fragment页面被初始化了..."); textView = new TextView(mContext); textView.setTextSize(20); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.RED); return textView; } @Override protected void initData() { super.initData(); Log.e(TAG, "自定义Fragment数据被初始化了..."); textView.setText("自定义页面"); } }
public class CommonFrameFragmentAdapter extends BaseAdapter { private final Context mContext; private final String[] mDatas; public CommonFrameFragmentAdapter(Context context,String[] datas){ this.mContext = context; this.mDatas = datas; } @Override public int getCount() { return mDatas.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(mContext); textView.setPadding(10,10,0,10); textView.setTextColor(Color.BLACK); textView.setTextSize(20); textView.setText(mDatas[position]); return textView; } }