TabLayout+ViewPager+Fragment(懒加载)实现导航栏

Android Material Design 系列之 TabLayout + ViewPager + Fragment 使用详解 前言 本文是 Material Design 系列第三篇:TabLayout + ViewPager + Fragment 基本使用,Material Design 所有控件属于高级 UI,所以 Material Design 控件是中高级工程师必备技能。现在市面上很多主流界面效果都是采用 Material Design 风格控件完成。希望博主 Material Design 系列文章对各位初学者有所帮助,也为自己学习做详细笔记。 一、TabLayout 方法介绍 1、addTab(TabLayout.T 阅读详情

之前,实现导航栏的效果有很多方法,使用第三方库,比如ViewPagerIndicator中的TabPagerIndicator,谷歌可能发现,导航栏使用的挺普遍的,so,也搞了一个属于自己的导航栏!就像侧滑菜单一样,也搞了一个属于自己的侧滑菜单DrawerLayout!

效果图是这样的:

这里写图片描述

跟ViewPagerIndicator实现的效果是一样的!

接下来看代码:

首先呢!需要compile一下:

compile 'com.android.support:design:25.3.1'

然后TabLayout就跟普通控件使用一样了!直接在xml里设置即可,代码如下:

<android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            app:tabIndicatorColor="#ff0000"
            app:tabSelectedTextColor="#ff0000"
            app:tabTextColor="#cccccc"
            app:tabMode="scrollable"/>

属性说明:

app:tabIndicatorColor:指示器那条下划线的颜色
app:tabTextColor:上面文本颜色
app:tabSelectedTextColor:文本被选中后的颜色
app:tabMode="scrollable" 适用于多文本的滑动

当然,还有一些别的属性,比如设置指示器下划线的粗细等等。

接下来就是HomeActivity的代码:

public class HomeActivity extends FragmentActivity implements View.OnClickListener{
    private ViewPager viewpager;
    private TabLayout layout;
    private DrawerLayout leftMenu;
    private ImageView touxiang;
    private List<String> titles = new ArrayList<>();
    private List<Fragment> fragments = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        initView();
        initData();
        viewpager.setAdapter(new PagerAdapter(getSupportFragmentManager(),titles,fragments));
        layout.setupWithViewPager(viewpager);//将导航栏和viewpager进行关联
        layout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewpager.setCurrentItem(tab.getPosition());//联动
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

    private void initData() {
        titles.add("推荐");
        titles.add("热点");
        titles.add("美女");
        titles.add("军事");
        titles.add("数码");
        titles.add("体育");
        titles.add("汽车");
        fragments.add(new TuiJianFragment());
        fragments.add(new ReDianFragment());
        fragments.add(new BeautyFragment());
        fragments.add(new JunShiFragment());
        fragments.add(new ShuMaFragment());
        fragments.add(new SportFragment());
        fragments.add(new CarFragment());
    }

    private void initView() {
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        touxiang = (ImageView) findViewById(R.id.touxiang);
        layout = (TabLayout) findViewById(R.id.title);
        leftMenu = (DrawerLayout) findViewById(R.id.left_menu);
        touxiang.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        leftMenu.openDrawer(GravityCompat.START);//打开侧滑菜单
    }
}

适配器:

public class PagerAdapter extends FragmentPagerAdapter {
    private List<String> titles;
    private List<Fragment> fragments;

    public PagerAdapter(FragmentManager fm, List<String> titles,List<Fragment> fragments) {
        super(fm);
        this.titles = titles;
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }
}

搞定!
————————————————————————————————————————————————————————————————
更多属性:

app:tabBackground="color"//整个TabLayout的颜色,这里不能直接写RGB,需要@color/xx

app:tabTextAppearance="@android:style/TextAppearance.Holo.Large"//设置文字的外貌大小

app:tabIndicatorHeight="2dp"//设置指示器下划线粗细,如果设置成0dp,则不显示指示器

app:tabMode="scrollable"//默认是fixed:固定的,标签很多时候会被挤压,不能滑动。

app:tabGravity="center"//居中,如果是fill,则是充满

默认选中某项这样设置:

tablayout.getTabAt(position).select();

————————————————————————————————————————————————————
PS:通常遇到这种组合,也需要实现Fragment懒加载,因为涉及到ViewPager的预加载特性,会预加载当前Fragment的前一个和后一个Fragment的数据。我们要实现的效果就是只有当点击该Fragment的时候,再去请求网络数据,禁用掉ViewPager的预加载特性,这样就节省很多开销。
可以让Fragment继承如下的BaseFragment:

public abstract class BaseFragment extends Fragment {
    protected boolean isInit;
    protected boolean isReallyLazy;//是否完全懒加载

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(setLayoutResourceID(), container, false);
        init();
        isInit = true;
        isCanLoadData();
        return view;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        isCanLoadData();
    }

    private void isCanLoadData() {
        //isReallyLazy为true实现完全懒加载,Fragment只会加载一次,再切回来的时候,不会加载,去掉该属性的话,再切回来的时候会重新加载
        if (getUserVisibleHint() && isInit && !isReallyLazy) {
            getData();
            isReallyLazy = true;
        }
    }

    protected abstract int setLayoutResourceID();

    protected abstract void init();

    protected abstract void getData();

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        isInit = false;
    }
}

这样就可以将一进入该Fragment加载网络数据的方法,或者是切换回该Fragment需要刷新数据的方法都放在上面的方法里了。
————————————————————————————————————————————————————————————
下面再实现一种案例。项目中有时会用到,就是Tab选项添加图片,可以随意控制图片在Tab中的位置。效果图大概如下:
这里写图片描述
左右滑动,可以改变字体颜色和图片。
核心代码:适配器getPageTitle返回null即可,然后增加一个自定义样式的方法:

public View getTabView(int position) {
        View view = LayoutInflater.from(context).inflate(R.layout.tab_item, null);
        TextView tab_title = view.findViewById(R.id.tab_title);
        tab_title.setText(titles.get(position));
        ImageView img = view.findViewById(R.id.tab_icon);
        if (position == 0) {
            tab_title.setTextColor(Color.RED);
            img.setImageResource(R.drawable.icon_selected);
        }
        if (position == 1) {
            tab_title.setTextColor(Color.GRAY);
            img.setImageResource(R.drawable.flower_unselected);
        }
        if (position == 2) {
            tab_title.setTextColor(Color.GRAY);
            img.setImageResource(R.drawable.coin_unselected);
        }
        return view;
    }

其中的tab_item布局就是随便定义文字和图片的摆放位置。这里我是将图片放在文字的右侧:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:orientation="horizontal"
        android:gravity="center">
        <TextView
            android:id="@+id/tab_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <ImageView
            android:id="@+id/tab_icon"
            android:layout_width="18dp"
            android:layout_height="18dp"
            android:layout_marginLeft="4dp" />
    </LinearLayout>
</LinearLayout>

最后Activity中进行设置:
在tabLayout.setupWithViewPager(viewPager)之后添加动态Tab内容

for (int i = 0; i < tabLayout.getTabCount(); i++) {
            TabLayout.Tab tab = tabLayout.getTabAt(i);
            tab.setCustomView(pagerAdapter.getTabView(i));
        }

然后TabLayout的滑动监听,动态改变文字颜色和图片即可:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
                View view = tab.getCustomView();
                ((TextView)(view.findViewById(R.id.tab_title))).setTextColor(Color.RED);
                ImageView imageView = view.findViewById(R.id.tab_icon);
                switch (tab.getPosition()){
                    case 0:
                        imageView.setImageResource(R.drawable.icon_selected);
                        break;
                    case 1:
                        imageView.setImageResource(R.drawable.flower_selected);
                        break;
                    case 2:
                        imageView.setImageResource(R.drawable.coin_selected);
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                View view = tab.getCustomView();
                ((TextView)(view.findViewById(R.id.tab_title))).setTextColor(Color.GRAY);
                ImageView imageView = view.findViewById(R.id.tab_icon);
                switch (tab.getPosition()){
                    case 0:
                        imageView.setImageResource(R.drawable.icon_unselected);
                        break;
                    case 1:
                        imageView.setImageResource(R.drawable.flower_unselected);
                        break;
                    case 2:
                        imageView.setImageResource(R.drawable.coin_unselected);
                        break;
                }
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
不止于滑动:用ViewPager+Fragment实现App引导页与主页Tab的实战踩坑记录 本文详细介绍了如何使用ViewPager和Fragment实现App引导页与主页Tab的实战经验,包括基础架构搭建、指示器与动画增强、与BottomNavigationView的深度集成、Fragment生命周期管理、状态保存与恢复以及性能优化方案。通过ViewPager2和FragmentStateAdapter的组合,开发者可以高效实现页面滑动和切换功能,提升用户体验和应用性能。 阅读详情

相关推荐

Android fragment使用时生命周期分析

最近在学习Fragment,顺便记录一下Fragment的生命周期,方便以后的使用 1、add和replace的区别 add:只在第一次加载的时候新建对象,后续都是复用之前的对象,只会回调onHiddenChanged方法,判断是否是当前展示的fragment replace:每次替换的时候都是将之前的fragment关闭,调用onStop、onDestroy方法,然后新展示的fragment开始初始化方法 2、TabLayout+ViewPager+fragment 使用TabLayout+ViewP

明天的增加的博客 633

TabLayout + ViewPager + Fragment 实现方式总结

应用内加个Tab实现左右滑动,已经是司空见惯,也有很多大佬进行了各种封装,(纯粹是做一下记录证明周末没有躺尸)。 首先是Android原生的TabLayout和ViewPager。 可参考APITabLayout 实现方式1 TabLayout + ViewPager + Fragment 1.两个Adapter的选用。 (一)FragmentPage...

Super 含 的博客 1768

Android导航栏设计实例:TabLayout+ViewPager+Fragment

本篇文章将介绍如何使用TabLayout、ViewPager和Fragment来实现一个漂亮且功能强大的导航栏效果。每个Fragment都有自己的生命周期和布局文件,可以在Activity中嵌入多个Fragment来构建复杂的界面。本文介绍了如何使用TabLayout、ViewPager和Fragment来实现Android应用程序中的导航栏效果。以上就是使用TabLayout、ViewPager和Fragment实现Android导航栏效果的详细步骤和相应的源代码。2.3 创建Fragment。

2301_79331328的博客 629

TabLayout+ViewPager+Fragment实现切页展示

写在前面 目前大多数的APP都采用的是几个Tab标签以及多个界面滑动的形式来提供多层次的交互体验,最为常用的做法就是采用TabLayout+ViewPager+Fragment的方式,最近在公司项目中遇到类似的界面,也看了各个论坛很多份博客,但是发现都没有完全把这种方法的坑填完,因此写下这篇博客,一方面是对知识的总结,另一方面也能让其他开发者们少走一些弯路,博客内容主要分为四个方面: T...

yourzeromax的博客 6万+

Android平台简易版QQ应用开发实战项目

想搞点炫酷的翻页效果?用分分钟实现:支持淡入淡出、3D旋转、景深等多种风格,随便挑。在Adapter末尾插入特殊类型的Footer:布局里放个ProgressBar加文字提示,用户一看就知道还在加载。这个“简易版QQ”项目看似简单,实则涵盖了Android开发中的绝大多数核心知识点:UI架构设计组件通信性能优化数据持久化异常处理更重要的是,它教会我们一个道理:优秀的用户体验,藏在每一个细节之中。

weixin_35811662的博客 724

本地部署 Anything LLM+Ollama+DeepSeek R1 大模型并实现外部访问

DeepSeek 一经发布就引起社会的广泛的关注,因为 DeepSeek 的价格低廉,性能卓越,提供了多种使用方式,满足不同用户的需求和场景。本文将详细的介绍如何在本地 Windows 上安装部署 Anything LLM + Ollama 来实现用户和 DeepSeek-r1 对话的功能以及利用路由侠内网穿透实现外网访问。

lyxnwct的博客 1896

Android 导航条效果实现(六) TabLayout+ViewPager+Fragment

TabLayout一、继承结构public class TabLayout extends HorizontalScrollView 二、TabLayout的使用 1、TabLayout简单使用 TabLayout来自design兼容包,使用需要添加依赖。android studio 添加依赖如下:

NoOneCode的博客 3万+

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第二节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去掉电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 6026

TabLayout+ViewPager+Fragment实现懒加载

在开发中经常用到TabLayout+ViewPager+Fragment的组合。如下图所示:首先介绍一下使用方法:xml文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 <android.support.design.widget.TabLayout android:id="@+id/tab_layout" andr

zhengyongbo的博客 631

智能车小白也能懂:手把手教你用LM358和工字电感搭建电磁循迹模块(附PCB设计避坑)

本文详细介绍了如何利用LM358运放和工字电感搭建智能车电磁循迹模块,从电感选型、电路设计到PCB布局和焊接调试,提供全流程实战指南。特别针对新手常见问题,如信号干扰、电路饱和等,给出具体解决方案和参数配置,帮助智能车比赛爱好者快速掌握电磁循迹技术。

weixin_30307921的博客 401

间充质干细胞衰老机制与抗衰老干预策略研究

干细胞技术在再生医学领域具有广阔应用前景,其中间充质干细胞(MSCs)因其多向分化潜能和免疫调节特性备受关注。细胞衰老是影响干细胞治疗效果的共性难题,表现为增殖能力下降、端粒缩短等特征。通过表观遗传学分析发现,衰老MSCs存在DNA甲基化异常和组蛋白修饰改变;线粒体功能障碍导致ATP产量锐减,ROS累积显著增加。针对这些机制,研究者开发了包括小分子化合物筛选、CRISPR基因编辑和三维培养优化在内的多种干预策略。这些技术在组织修复、抗衰老治疗等应用场景中展现出重要价值,例如可提升心肌梗死修复效率2.3倍,缩

weixin_33502772的博客 227

Android底部导航栏标签切换: ToolBar+TabLayout+ViewPager+Fragment

本文主要讲述实现以及Fragment切换之间如何优化,减少内存的开销,相信不少朋友吃过Fragment生命周期的亏。话不多说,切入正题。 1、结合ToolBarTabLayout+ViewPager+Fragment实现的底部导航功能 效果 与 分析 效果图如下,一般的手机应用首页就是这种样式,包括手机淘宝、QQ、微信。 我的主页 QQ 下面是新版QQ的界面,底部的导航栏实现的是切...

Xu_JL1997的博客 1560

大数据运维面试题及答案

1. 架构组成:- 2 个 NameNode(Active 活跃节点、Standby 备用节点),实时同步元数据(通过 JournalNode 集群,默认 3 个节点,存储 edits 日志,Active 写入、Standby 读取以保持元数据一致);- 容错性强:通过 RDD 的 “ lineage(血缘)” 机制,任务失败时可快速重算,无需从头执行。:集群 “大脑”,管理元数据(文件目录、块位置),实时响应客户端请求,数据存于内存,元数据镜像(fsimage)和编辑日志(edits)持久化到磁盘;

weixin_42795092的博客 907

Android 基于TabLayout + ViewPager2 + Fragment + 角标 实现底部导航栏(升级版)

TabLayout + ViewPager2 + Fragment + 角标 实现底部导航栏

weixin_41782226的博客 2886

学Simulink--决策规划场景实例:基于Simulink的智能车辆行为决策仿真

本文基于Simulink平台构建智能车辆变道决策仿真系统,采用MOBIL算法实现"决策-规划-执行"全流程。系统包含自车动力学模型、环境感知模块(含5%噪声)、决策控制器和轨迹规划模块,通过五次多项式实现平滑变道。仿真验证了三种典型工况:正常变道(成功率100%)、邻车拒绝让行和紧急避障,各项指标均满足要求(TTC>3s,横向加速度<2m/s²,决策周期<100ms)。文章详细介绍了建模步骤、核心算法实现和参数配置方法,并提出了强化学习、多车协同等优化方向。该模型为智能

amy_mhd的博客 153

第1章:认识OpenClaw

OpenClaw是一个开源的 AI 智能体 Gateway 网关项目名称演变:OpenClaw 原名 Clawdbot,因 Anthropic 商标顾虑在 2026年1月27日更名为 Moltbot(过渡名),最终在1月30日确定为 OpenClaw。三个名字本质是同一个项目,功能完全一致。🏠在你的电脑上运行:完全本地部署,数据隐私有保障📁访问本地文件:可以搜索、读取、编辑你电脑上的文件🔌扩展能力:通过Skills(技能)系统无限扩展功能💬多平台使用。

Maynor的博客 2834

[Android开发] Fragment的子Fragment+TabLayout+ViewPager 的使用

Android Fragment的子Fragment+TabLayout+ViewPager 的使用 文章目录Android Fragment的子Fragment+TabLayout+ViewPager 的使用1 思路分析2 具体实现2.1 Activity 中 Fragment+ViewPager 的使用2.2 Fragment 中子Fragment+TabLayout+ViewPager的使用...

龙王院的博客 1008

matlab 点云按高程进行赋色【2024最新版】

首先按照Z轴方向求取所在点云的高程极值(包括高程最大值与最小值),然后将高程归一化到0~255范围内,最后采用matlab中的colormap颜色渲染函数进行赋色并保存渲染结果到点云。

点云侠的博客 3341

Tablayout + Fragment + ViewPager的懒加载实现

Android Tablayout + Fragment + ViewPager的懒加载实现 结合收藏 https://blog.youkuaiyun.com/qq2247064190/article/details/104518119 加 https://my.oschina.net/zhongsm/blog/3136312

u014105655的博客 355

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

FrameLayout+RadioGroup做导航栏(不适用Viewpager+Fragment+tablayout)

这里给大家说一下 我们在做导航栏的时候 我们用到的是add 和show 以及 hide 这些方法呢是在我们做导航栏的时候用到的比较多 这个方法每次切换页面的时候 页面不会重新加载适用于多次使用碎片场景 还有一种是将我们的add换成我们的replace replece这个方法呢每次切换我们的fragment页面的时候页面会被销毁掉,销毁掉之后呢会重新加载这个fragment页面,所以只适用于一次fragment碎片场景。解答:这个文件就是我们导航栏底部的选中和非选中状态的导航栏设置。

weixin_47139560的博客 932

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

TabLayout+ViewPager+Fragment实现底部导航

很多android的应用都有采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,今天我分享一种方法:TabLayout+ViewPager+Fragment实现底部导航 先上效果图:                        编码准备:在项目的build.gradle添加依赖:compile 'com.android.support:design:23.1.1

Yyongchao的博客 7598

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android实现顶部导航栏(附带源码)

Android实现顶部导航栏(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3169

Fragment嵌套Fragment,Viewpager和Fragment联动,懒加载

一、效果展示 二、主页布局 xml version="1.0" encoding="utf-8"?> xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_paren

Tangsan6666的博客 2630

Tablayout + viewpager + fragment 实现你的简易导航栏

实现该效果主要分一下几步:    1、build.gradle 中导入 compile 'com.android.support:design:26.0.0-alpha1' 依赖,具体版本视情况而定    2、上主布局文件 activity_main.xml,代码如下:        &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLa...

fengwuJ的博客 488

Android--- Drawer and Tab Navigation with ViewPager

Android--- Drawer and Tab NavigationTab Navigation --- View Pager+ Fragment + TabLayout关于ViewPagerTab NavigationDrawer Navigation Tab Navigation — View Pager+ Fragment + TabLayout 关于ViewPager ViewPager是一个可以实现横向滑动的组件, 如图片横向滑动和页面横向滑动 ViewPager2 ViewPag

HelloWorld 3193

android tab的实现方案

参考博客这里写链接内容 上述博客中提出了四种实现方式 1、ViewPager+Button实现Tab 这种,我以前只用来做轮播图,因为ViewPager的内容改起来真的很麻烦 2、Fragment切换+button实现Tab 这种方式还不错,但是我总考虑内存占用是不是过大,而且切换过于麻烦 3、FragmentPagerAdapter+ViewPager+Button实现Tab 由于...

1376
上一篇: DrawerLayout侧滑菜单
下一篇: ViewPager引导页实现跟随式小圆点
尘彦
博客等级 码龄11年 92粉丝 22原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值