IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 导航栏与toolbar的优化 -> 正文阅读

[移动开发]导航栏与toolbar的优化

面对导航栏大家都不陌生

在布局中用<include layout="@layout/bottom"/>就可以实现,但面对导航栏的跳转,想必各位都有自己的理解。我使用的是fragment跳转,在activity中囊括所有导航栏的页面,结合viewpaper可以打造一个极好的效果,

代码是

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//声明ViewPager
private ViewPager mViewPager;
//适配器
private FragmentPagerAdapter mAdapter;
//装载Fragment的集合
private List<Fragment> mFragments;
//三个Tab对应的布局
private LinearLayout mTab1,mTab2,mTab3,mTab4;
//三个Tab对应的ImageButton
private ImageButton mImg1,mImg2,mImg3,mImg4;
private TextView tv_sy1,tv_sc1,tv_me1,tv_fl1;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 initViews();//初始化控件
    selectTab(0);//初始页面为主页面
    initEvents();//初始化事件
    initDatas();//初始化数据
}
//初始化控件
private void initViews(){
    mViewPager = (ViewPager) findViewById(R.id.ViewPager);

    mTab1 = (LinearLayout) findViewById(R.id.lin_1);
    mTab2 = (LinearLayout) findViewById(R.id.lin_2);
    mTab3 = (LinearLayout) findViewById(R.id.lin_3);
    mTab4 = (LinearLayout) findViewById(R.id.lin_4);

    mImg1 = (ImageButton) findViewById(R.id.im_sy);
    mImg2 = (ImageButton) findViewById(R.id.im_fl);
    mImg3 = (ImageButton) findViewById(R.id.im_sc);
    mImg4 = (ImageButton) findViewById(R.id.im_me);

    tv_sy1=(TextView) findViewById(R.id.tv_sy);
    tv_fl1=(TextView) findViewById(R.id.tv_fl);
    tv_sc1=(TextView) findViewById(R.id.tv_sc);
    tv_me1=(TextView) findViewById(R.id.tv_me);
}

private void initEvents(){
    //设置三个Tab的点击事件

    mTab1.setOnClickListener(this);
    mTab2.setOnClickListener(this);
    mTab3.setOnClickListener(this);
    mImg4.setOnClickListener(this);
    tv_sy1.setOnClickListener(this);
    tv_fl1.setOnClickListener(this);
    tv_sc1.setOnClickListener(this);
    tv_me1.setOnClickListener(this);
}

private void initDatas(){
    mFragments=new ArrayList<>();
    //将三个Fragment加入集合中

    mFragments.add(new SYFragment());
    mFragments.add(new FLFragment());
    mFragments.add(new SCFragment());
    mFragments.add(new MeFragment());

    //初始化适配器
    mAdapter=new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }

        @Override
        public int getCount() {
            return mFragments.size();
        }
    };

    //设置ViewPager的适配器
    mViewPager.setAdapter(mAdapter);
    //将ViewPager的预加载个数设置为你的所有Fragment的数量,解决滑动时候轮播图出现空白的问题
    mViewPager.setOffscreenPageLimit(mFragments.size());
    //设置ViewPager的切换监听
    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        //页面滚动事件
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        //页面选中事件
        @Override
        public void onPageSelected(int position) {
            //设置position对应的集合中的fragment
            mViewPager.setCurrentItem(position);
            resetImgs();
            selectTab(position);
        }
        //页面滚动状态改变事件
        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}

@Override
public void onClick(View view) {
    //先将三个ImageButton置为灰色
    resetImgs();
    switch (view.getId()){
        case R.id.im_sy:
            selectTab(0);
            break;
        case R.id.im_fl:
            selectTab(1);
            break;
        case R.id.im_sc:
            selectTab(2);
            break;
        case R.id.im_me:
            selectTab(3);
            break;
    }
}
//将三个ImageButton设置为灰色
private void resetImgs() {
    mImg1.setImageResource(R.drawable.shouye);
    mImg2.setImageResource(R.drawable.fl);
    mImg3.setImageResource(R.drawable.sc);
    mImg4.setImageResource(R.drawable.me);
    tv_fl1.setTextColor(getResources().getColor(R.color.black));
    tv_sy1.setTextColor(getResources().getColor(R.color.black));
    tv_sc1.setTextColor(getResources().getColor(R.color.black));
    tv_me1.setTextColor(getResources().getColor(R.color.black));
}

private void selectTab(int i) {
    //根据点击的Tab设置对应的ImageButton为选中的颜色
    switch (i) {
        case 0:
            mImg1.setImageResource(R.drawable.shouye1);
            tv_sy1.setTextColor(getResources().getColor(R.color.red));
            break;
        case 1:
            mImg2.setImageResource(R.drawable.fl1);
            tv_fl1.setTextColor(getResources().getColor(R.color.red));

            break;
        case 2:
            mImg3.setImageResource(R.drawable.sc1);
            tv_sc1.setTextColor(getResources().getColor(R.color.red));

            break;
        case 3:
            mImg4.setImageResource(R.drawable.me1);
            tv_me1.setTextColor(getResources().getColor(R.color.red));

            break;
    }
    //设置当前点击的Tab所对应的页面
    mViewPager.setCurrentItem(i);
}

}

由于之前多次修修改改,代码上显得有点呆,但无伤大雅。当时我心头一热,想在此基础上加一个抽屉,这涉及到toolbar的使用。一开始尝试了笨方法,在fragment里面创建toolbar,最终会发现setSupportActionBar报错,反复修改,最终误打误撞的在总activity布局中加入toolbar(之前就试过,但出现了各种报错),一番修改后能如愿运行

代码如下

<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <androidx.viewpager.widget.ViewPager
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/ViewPager"
                />
            <androidx.appcompat.widget.Toolbar
                android:id="@+id/tool_bar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="#08ECD6"
                android:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"
                app:popupTheme="@style/Base.ThemeOverlay.AppCompat.Light"
                />

            <com.google.android.material.navigation.NavigationView
                android:id="@+id/nav_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                >

                <include layout="@layout/bottom"/>
            </com.google.android.material.navigation.NavigationView>

        </RelativeLayout>
        <com.google.android.material.navigation.NavigationView
            android:id="@+id/navigation_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/nav_header"
            app:menu="@menu/nav_menu" />

    </androidx.drawerlayout.widget.DrawerLayout>
</RelativeLayout>

我只是发博客来以此警戒自己,若各位有更好的见解请不吝赐教

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:41:49  更:2022-03-15 22:42:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:19:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码