zoukankan      html  css  js  c++  java
  • BottomNavigationView(2)和viewpage组合

    implementation 'com.google.android.material:material:1.2.1'
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/viewPage"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="0dp"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginBottom="0dp"
            app:layout_constraintBottom_toTopOf="@+id/navigation" />
        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?android:attr/windowBackground"
            android:layout_alignParentBottom="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:menu="@menu/menu2" />
    
    
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    public class MainActivity extends AppCompatActivity {
        private ViewPager viewPager;
        private BottomNavigationView navigation;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init();
        }
    
        private void init() {
    
            viewPager = (ViewPager) findViewById(R.id.viewPage);
    
            ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
            viewPager.setAdapter(adapter);
        navigation = (BottomNavigationView)findViewById(R.id.navigation);
        // 重新点击监听(即点击目前选中的Tab时触发)
            navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Log.e("ee","Selected Item:"+item.getTitle());
                onTabSelected(item.getItemId());
                return true;
            }
        });
        onTabSelected(R.id.navigation_home);
            viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
                }
    
                @Override
                public void onPageSelected(int position) {
                    // 将当前的页面对应的底部标签设为选中状态
    
                     navigation.getMenu().getItem(position).setChecked(true);
    
                }
    
                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });
    }
    
    
       public void onTabSelected(int id) {
           FragmentManager manager = getSupportFragmentManager();
      FragmentTransaction transaction= manager.beginTransaction();
            Fragment fragment = null;
            switch (id) {
                case R.id.navigation_home:
    
                    viewPager.setCurrentItem(0);
                    break;
                case R.id.navigation_dashboard:
    
                    viewPager.setCurrentItem(1);
                    break;
                case R.id.navigation_notifications:
    
                    viewPager.setCurrentItem(2);
                    break;
                case R.id.navigation_setting:
    
                    viewPager.setCurrentItem(3);
    
                    break;
            }
    
        }
    
    //    /**
    //     * 禁用item 缩放动画(选中放大图标/文字 ---->> 图片静止不再放大, 文字会有细微的放大效果)
    //     * 出处: https://blog.csdn.net/zzyawei/article/details/81082257
    //     */
    //    @SuppressLint("RestrictedApi")
    //    public static void disableItemScale(BottomNavigationView view) {
    //        try {
    //            BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
    //
    //            Field mLargeLabelField = BottomNavigationItemView.class.getDeclaredField("mLargeLabel");
    //            Field mSmallLabelField = BottomNavigationItemView.class.getDeclaredField("mSmallLabel");
    //            Field mShiftAmountField = BottomNavigationItemView.class.getDeclaredField("mShiftAmount");
    //            Field mScaleUpFactorField = BottomNavigationItemView.class.getDeclaredField("mScaleUpFactor");
    //            Field mScaleDownFactorField = BottomNavigationItemView.class.getDeclaredField("mScaleDownFactor");
    //
    //            mSmallLabelField.setAccessible(true);
    //            mLargeLabelField.setAccessible(true);
    //            mShiftAmountField.setAccessible(true);
    //            mScaleUpFactorField.setAccessible(true);
    //            mScaleDownFactorField.setAccessible(true);
    //
    //            final float fontScale = view.getResources().getDisplayMetrics().scaledDensity;
    //
    //            for (int i = 0; i < menuView.getChildCount(); i++) {
    //                BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i);
    //
    //                TextView lagerObj = (TextView) mLargeLabelField.get(itemView);
    //                TextView smallObj = (TextView) mSmallLabelField.get(itemView);
    //                lagerObj.setTextSize(smallObj.getTextSize() / fontScale + 0.5f);
    //
    //                mShiftAmountField.set(itemView, 0);
    //                mScaleUpFactorField.set(itemView, 1f);
    //                mScaleDownFactorField.set(itemView, 1f);
    //
    //                itemView.setChecked(itemView.getItemData().isChecked());
    //            }
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
    //    }
    
    }
    public class ViewPagerAdapter extends FragmentPagerAdapter {
    
        private List<Fragment> fragmentList = new ArrayList<>();
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
            fragmentList.add( new BlankFragment1() );
            fragmentList.add( new BlankFragment2() );
            fragmentList.add( new BlankFragment3() );
            fragmentList.add( new BlankFragment4() );
        }
        @Override
        public Fragment getItem(int i) {
    
    
            return fragmentList.get( i );
        }
    
        @Override
        public int getCount() {
            return fragmentList.size();
    }
    
    
    }
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
    
        <item
            android:id="@+id/navigation_home"
            android:icon="@drawable/bottom1"
            android:title="home" />
    
        <item
            android:id="@+id/navigation_dashboard"
            android:icon="@drawable/bottom2"
            android:title="dashboard" />
    
        <item
            android:id="@+id/navigation_notifications"
            android:icon="@drawable/bottom3"
            android:title="notifications" />
    
        <item
            android:id="@+id/navigation_setting"
            android:icon="@drawable/bottom4"
            android:title="share" />
    
    
    </menu>
  • 相关阅读:
    grep如何忽略.svn目录,以及如何忽略多个目录
    CSS写的提示框(兼容火狐IE等各大浏览器)
    校验IPv4和IPv6地址和URL地址
    input框设置onInput事件只能输入数字,能兼容火狐IE9
    $(function(){})、$(document).ready(function(){})....../ ready和onload的区别
    jQuery EasyUI 教程-Tooltip(提示框)
    小知识随手记(一)
    自动换行效果对比
    getComputedStyle与currentStyle获取样式(style/class)
    弹出层框架layer快速使用
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/13895689.html
Copyright © 2011-2022 走看看