|
@@ -0,0 +1,281 @@
|
|
|
+package com.youpu.view.activity;
|
|
|
+
|
|
|
+import android.os.Bundle;
|
|
|
+import android.support.v4.app.Fragment;
|
|
|
+import android.support.v4.app.FragmentManager;
|
|
|
+import android.support.v4.app.FragmentPagerAdapter;
|
|
|
+import android.support.v4.view.ViewPager;
|
|
|
+import android.util.TypedValue;
|
|
|
+import android.view.Gravity;
|
|
|
+import android.view.View;
|
|
|
+import android.view.ViewGroup;
|
|
|
+import android.widget.FrameLayout;
|
|
|
+import android.widget.ImageView;
|
|
|
+import android.widget.LinearLayout;
|
|
|
+import android.widget.TextView;
|
|
|
+
|
|
|
+import com.ashokvarma.bottomnavigation.BottomNavigationBar;
|
|
|
+import com.ashokvarma.bottomnavigation.BottomNavigationItem;
|
|
|
+import com.youpu.R;
|
|
|
+import com.youpu.base.BaseActivity;
|
|
|
+import com.youpu.presenter.impl.MainAPresenterImpl;
|
|
|
+import com.youpu.presenter.inter.IMainAPresenter;
|
|
|
+import com.youpu.view.diy.viewpager.ViewPagerSlide;
|
|
|
+import com.youpu.view.fragment.HomeFragment;
|
|
|
+import com.youpu.view.fragment.PuFragment;
|
|
|
+import com.youpu.view.inter.IMainAView;
|
|
|
+
|
|
|
+import java.lang.reflect.Field;
|
|
|
+
|
|
|
+import butterknife.BindView;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 项目为基本项目搭建框架
|
|
|
+ * 总体Mvp+RxJava+Retrofit
|
|
|
+ * 使用自定义适配方案
|
|
|
+ * 首页,使用系统切换ViewPager+Fragment
|
|
|
+ */
|
|
|
+public class MainActivity extends BaseActivity implements BottomNavigationBar.OnTabSelectedListener, ViewPager.OnPageChangeListener, IMainAView {
|
|
|
+
|
|
|
+ @BindView(R.id.view_pager)
|
|
|
+ ViewPagerSlide viewPager;
|
|
|
+ @BindView(R.id.bottom_navigation_bar)
|
|
|
+ BottomNavigationBar bottomNavigationBar;
|
|
|
+ //存放fragment的集合
|
|
|
+ private Fragment[] fragments;
|
|
|
+
|
|
|
+ //切换不同fragment用的下标
|
|
|
+ private int index;
|
|
|
+ private IMainAPresenter mIMainAPresenter;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onCreate(Bundle savedInstanceState) {
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
+ mIMainAPresenter = new MainAPresenterImpl(this);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected int getLayout() {
|
|
|
+ return R.layout.activity_main;
|
|
|
+ }
|
|
|
+
|
|
|
+ // public boolean flag = true;
|
|
|
+// 这里要实现的是根据不同的用户展示不同数量的tab
|
|
|
+ public boolean flag = false;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void initEvent() {
|
|
|
+ if (flag) {
|
|
|
+ initBottomNavigationBar();
|
|
|
+ initViewPager();
|
|
|
+ } else {
|
|
|
+ initBottomNavigationBar2();
|
|
|
+ initViewPager2();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*此后三个为ViewPager所重写*/
|
|
|
+ @Override
|
|
|
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onPageSelected(int i) {
|
|
|
+ bottomNavigationBar.selectTab(i);
|
|
|
+ this.index = i;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onPageScrollStateChanged(int state) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*此后三个为BottomNavigationBar所重写*/
|
|
|
+ @Override
|
|
|
+ public void onTabSelected(int position) {
|
|
|
+ viewPager.setCurrentItem(position);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTabUnselected(int position) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTabReselected(int position) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public <T> T request(int requestFlag) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public <T> void response(T response, int responseFlag) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //初始化viewpager
|
|
|
+ private void initViewPager() {
|
|
|
+// viewPager = (ViewPagerSlide) findViewById(R.id.view_pager);
|
|
|
+ fragments = new Fragment[5];
|
|
|
+ fragments[0] = HomeFragment.newInstance();
|
|
|
+ fragments[1] = PuFragment.newInstance();
|
|
|
+ fragments[2] = HomeFragment.newInstance();
|
|
|
+ fragments[3] = PuFragment.newInstance();
|
|
|
+ fragments[4] = HomeFragment.newInstance();
|
|
|
+// fragments[0] = new HomeFragment();
|
|
|
+// fragments[1] = new PuFragment();
|
|
|
+// fragments[2] = new MeFragment();
|
|
|
+// fragments[3] = new HomeFragment();
|
|
|
+// fragments[4] = new PuFragment();
|
|
|
+
|
|
|
+ /*ViewPager关闭左右滑动*/
|
|
|
+ viewPager.setSlide(false);
|
|
|
+
|
|
|
+
|
|
|
+ viewPager.setOffscreenPageLimit(4);
|
|
|
+ viewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager(), fragments));
|
|
|
+ viewPager.addOnPageChangeListener(this);
|
|
|
+ viewPager.setCurrentItem(0);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initViewPager2() {
|
|
|
+// viewPager = (ViewPagerSlide) findViewById(R.id.view_pager);
|
|
|
+ fragments = new Fragment[3];
|
|
|
+ fragments[0] = HomeFragment.newInstance();
|
|
|
+ fragments[1] = PuFragment.newInstance();
|
|
|
+ fragments[2] = HomeFragment.newInstance();
|
|
|
+// fragments[0] = new HomeFragment();
|
|
|
+// fragments[1] = new PuFragment();
|
|
|
+// fragments[2] = new MeFragment();
|
|
|
+// fragments[3] = new HomeFragment();
|
|
|
+// fragments[4] = new PuFragment();
|
|
|
+
|
|
|
+ /*ViewPager关闭左右滑动*/
|
|
|
+ viewPager.setSlide(false);
|
|
|
+
|
|
|
+
|
|
|
+ viewPager.setOffscreenPageLimit(2);
|
|
|
+ viewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager(), fragments));
|
|
|
+ viewPager.addOnPageChangeListener(this);
|
|
|
+ viewPager.setCurrentItem(0);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //初始化底部导航菜单
|
|
|
+ private void initBottomNavigationBar() {
|
|
|
+// bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
|
|
|
+ bottomNavigationBar.setTabSelectedListener(this);
|
|
|
+ bottomNavigationBar.clearAll();
|
|
|
+ bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
|
|
|
+ bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
|
|
|
+ bottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.home_sel, "主页").setInactiveIconResource(R.drawable.home_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .addItem(new BottomNavigationItem(R.drawable.pu_sel, "单据").setInactiveIconResource(R.drawable.pu_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .addItem(new BottomNavigationItem(R.drawable.me_sel, "审核").setInactiveIconResource(R.drawable.me_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .addItem(new BottomNavigationItem(R.drawable.home_sel, "报表").setInactiveIconResource(R.drawable.home_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .addItem(new BottomNavigationItem(R.drawable.me_sel, "设置").setInactiveIconResource(R.drawable.me_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .initialise();
|
|
|
+ setBottomNavigationItem(bottomNavigationBar, 5, 20, 12);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initBottomNavigationBar2() {
|
|
|
+// bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
|
|
|
+ bottomNavigationBar.setTabSelectedListener(this);
|
|
|
+ bottomNavigationBar.clearAll();
|
|
|
+ bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
|
|
|
+ bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
|
|
|
+ bottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.home_sel, "主页").setInactiveIconResource(R.drawable.home_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .addItem(new BottomNavigationItem(R.drawable.pu_sel, "单据").setInactiveIconResource(R.drawable.pu_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .addItem(new BottomNavigationItem(R.drawable.me_sel, "设置").setInactiveIconResource(R.drawable.me_unsel).setActiveColorResource(R.color.colorPrimaryDark))
|
|
|
+ .initialise();
|
|
|
+ setBottomNavigationItem(bottomNavigationBar, 5, 20, 12);
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改底部文字图片大小,间距
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param bottomNavigationBar,需要修改的 BottomNavigationBar
|
|
|
+ * @param space 图片与文字之间的间距
|
|
|
+ * @param imgLen 单位:dp,图片大小,应 <= 36dp
|
|
|
+ * @param textSize 单位:dp,文字大小,应 <= 20dp
|
|
|
+ * <p>
|
|
|
+ * 使用方法:直接调用setBottomNavigationItem(bottomNavigationBar, 6, 26, 10);
|
|
|
+ * 代表将bottomNavigationBar的文字大小设置为10dp,图片大小为26dp,二者间间距为6dp
|
|
|
+ **/
|
|
|
+ private void setBottomNavigationItem(BottomNavigationBar bottomNavigationBar, int space, int imgLen, int textSize) {
|
|
|
+ Class barClass = bottomNavigationBar.getClass();
|
|
|
+ Field[] fields = barClass.getDeclaredFields();
|
|
|
+ for (int i = 0; i < fields.length; i++) {
|
|
|
+ Field field = fields[i];
|
|
|
+ field.setAccessible(true);
|
|
|
+ if (field.getName().equals("mTabContainer")) {
|
|
|
+ try {
|
|
|
+ //反射得到 mTabContainer
|
|
|
+ LinearLayout mTabContainer = (LinearLayout) field.get(bottomNavigationBar);
|
|
|
+ for (int j = 0; j < mTabContainer.getChildCount(); j++) {
|
|
|
+ //获取到容器内的各个Tab
|
|
|
+ View view = mTabContainer.getChildAt(j);
|
|
|
+ //获取到Tab内的各个显示控件
|
|
|
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dip2px(56));
|
|
|
+ FrameLayout container = (FrameLayout) view.findViewById(R.id.fixed_bottom_navigation_container);
|
|
|
+ container.setLayoutParams(params);
|
|
|
+ container.setPadding(dip2px(12), dip2px(0), dip2px(12), dip2px(0));
|
|
|
+
|
|
|
+ //获取到Tab内的文字控件
|
|
|
+ TextView labelView = (TextView) view.findViewById(com.ashokvarma.bottomnavigation.R.id.fixed_bottom_navigation_title);
|
|
|
+ //计算文字的高度DP值并设置,setTextSize为设置文字正方形的对角线长度,所以:文字高度(总内容高度减去间距和图片高度)*根号2即为对角线长度,此处用DP值,设置该值即可。
|
|
|
+ labelView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
|
|
|
+ labelView.setIncludeFontPadding(false);
|
|
|
+ labelView.setPadding(0, 0, 0, dip2px(20 - textSize - space / 2));
|
|
|
+
|
|
|
+ //获取到Tab内的图像控件
|
|
|
+ ImageView iconView = (ImageView) view.findViewById(com.ashokvarma.bottomnavigation.R.id.fixed_bottom_navigation_icon);
|
|
|
+ //设置图片参数,其中,MethodUtils.dip2px():换算dp值
|
|
|
+ params = new FrameLayout.LayoutParams(dip2px(imgLen), dip2px(imgLen));
|
|
|
+ params.setMargins(0, 0, 0, space / 2);
|
|
|
+ params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
|
|
|
+ iconView.setLayoutParams(params);
|
|
|
+ }
|
|
|
+ } catch (IllegalAccessException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public int dip2px(float dpValue) {
|
|
|
+ final float scale = getApplication().getResources().getDisplayMetrics().density;
|
|
|
+ return (int) (dpValue * scale + 0.5f);
|
|
|
+ }
|
|
|
+
|
|
|
+ class SectionsPagerAdapter extends FragmentPagerAdapter {
|
|
|
+ Fragment fragments[] = new Fragment[4];
|
|
|
+
|
|
|
+ public SectionsPagerAdapter(FragmentManager fm, Fragment fragments[]) {
|
|
|
+ super(fm);
|
|
|
+ this.fragments = fragments;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Fragment getItem(int position) {
|
|
|
+ return fragments[position];
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int getCount() {
|
|
|
+ return fragments.length;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|