1.3 Android中的几种UI排布方法介绍

基于STM32的电子时钟设计 基于STM32的电子时钟设计1、设计目的2、设计具体要求3、proteus仿真图4、程序代码 1、设计目的 (1)掌握使用KEIL MDK5进行软件开发的具体流程; (2)掌握硬件电路的设计方法; (3)掌握STM32微控制器的程序设计及代码编写方法。 2、设计具体要求 (1)通过STM32自带的实时时钟功能获取时间信息; (2)在OLED显示屏上显示日期、时、分、秒等时间信息; (3)通过按键可对时间信息进行修改; (4)具有闹钟设定功能; (5)加分项:自行增加其他功能。 3、proteus仿真图 4 阅读详情

一、使用XML布局文件控制UI界面

关于XML基本语法介绍和XML语法总结可以参考这里:XML基本语法介绍、XML语法总结。

在Android中,提供了一种非常简单、方便的方法用于控制UI界面。该方法采用XML文件来进行界面布局,从而将布局界面的代码和逻辑控制的Java代码分离开来,使用程序的结构更加清晰、明了,这种方法就是使用XML布局文件控制UI界面。

使用XML布局文件控制UI界面可以分为以下两个关键步骤

(1)在Android应用的res/layout目录下编写XML布局文件,可以是任何符合XML命名规则的文件名。创建后R.java会自动收录该布局资源。
(2)在Activity中使用以下Java代码显示XML文件中布局的内容,如:

setContentView(R.layout.<资源文件名字>);

在上面的代码中,<资源文件名字>是XML布局文件的文件名,通过这段代码步骤就可轻松实现布局并显示UI界面功能了。
当在布局文件中添加多个UI控件时,都可以为该UI组件指定android:id属性,该属性的值代表该组件的唯一标识。接下来如果希望在Java中访问指定的UI组件,则可以通过如下代码进行访问:

findViewById(R.id.<id名称>);

一旦在程序中获得指定UI组件之后,接下来就可以通过代码来控制各个UI组件的外观和行为了,包括UI控件绑定监听器等。

二、使用Java代码控制UI界面

虽然Android推荐使用XML布局文件来控制UI界面,但是如果你愿意,Android也允许我们使用Java动态进行布局,也就是可以根据业务的需求改变界面。

实际上就是用代码写出界面,虽然代码量比较大,而且维护起来相比之下更繁琐一些,特别是一些界面空间比较多的时候。但是它也有缺点,那就是没有静态布局那种无可比拟的灵活性,而且当我们通过自定义来创造属于我们自己独一无二的控件的时候,用的基本上都是动态布局,这也是开发者钟情它的原因。

下面给个简单的栗子:
public class CodeViewActivity extends Activity {
    // 当第一次创建该Activity时回调该方法
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 创建一个线性布局管理器
        LinearLayout layout = new LinearLayout(this);
        // 设置该Activity显示layout
        super.setContentView(layout);
        // 设置布局方向
        layout.setOrientation(LinearLayout.VERTICAL);
        // 创建一个TextView
        final TextView show = new TextView(this);
        // 创建一个按钮
        Button bn = new Button(this);
        // 设置按钮文字
        bn.setText(R.string.ok);
        // 设置按钮大小为“包裹内容”
        bn.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        // 向layout容器中添加TextView
        layout.addView(show);
        // 向layout容器中添加按钮
        layout.addView(bn);
        // 为按钮绑定一个事件监听器
        bn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                show.setText(R.string.hello_world + "  " + new java.util.Date());
            }
        });
    }
}

其中,Button就是我们上篇说的View,LinearLayout则是ViewGroup。不难看出,无论创建那种控件都需要传入一个this参数,这是由于创建UI组件时都需要传入一个Context参数,它代表访问Android应用环境全局信息的API,让UI控件持有这么一个Context可以让它通过Context获取安卓应用环境的全局信息。

说到这儿,我想有必要和大家说一下什么是Context,因为这是我们在开发中经常用到的一个概念。

什么是context?

Context

大家有没有想过,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?

Context即是上下文
Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是我们这里讨论的Context。

Context不同的意思
Context在不同的角度有不同的意思,字面意思是上下文,或者叫做场景,也就是用户与操作系统操作的一个过程。比如你打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据。但是在程序的角度Context是个抽象类,他的继承关系如上图所示。

可以看到,Context的继承结构还是稍微有点复杂的,不过在这里我们看到了几个所比较熟悉的面孔,Activity、Service、还有Application(这三个面孔后面的文章里会介绍到)。由此我们就可以得出结论:Context一共有三种类型,分别是Application、Activity和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种。

Context的作用
那么Context到底可以实现哪些功能呢?这个就实在是太多了,弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等都需要用到Context。由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。

特殊的场景
有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。

关于Context的其他的知识,比如:引用的保持、Context数量、使用Application的相关问题等等,我们会在后的相关文章文章中提到。

三、使用XML和Java混合控制UI界面

完全使用Java代码控制Ui界面的时候不仅繁琐,而且不利于解耦,但完全采用Xml方式虽然简单方便,但又有失灵活,因此有些时候,尤其是自定义控件的时候,我们需要用Xml和Java混合的方式来控制UI界面。

来个栗子:
  • activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 定义一个线性布局容器 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:id="@+id/root"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</LinearLayout>

上面这个文件简单定义了一个线性布局容器(ViewGroup),然后我们在Java中获取该线性布局,然后通过Java动态的添加组件。

  • MainActivity.java
public class MainActivity extends Activity {
    // 定义一个访问图片的数组
    int[] images = new int[] {
            R.drawable.Will1,
            R.drawable.Will2,
            R.drawable.Will3,
            R.drawable.Will4,
            R.drawable.Will5, };
    int nowImg = 0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取LinearLayout布局容器
        LinearLayout main = (LinearLayout) findViewById(R.id.root);
        // 程序创建ImageView组件
        final ImageView image = new ImageView(this);
        // 将ImageView组件添加到LinearLayout布局容器中
        main.addView(image);
        // 初始化时显示第一张图片
        image.setImageResource(images[0]);
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 改变ImageView里显示的图片
                image.setImageResource(images[++nowImg % images.length]);
            }
        });
    }
}

然后我们为ImageView绑定了点击事件,这样我们就可以通过点击图片进行几张图片的轮询显示了,这就完成了一个混合编程的简单示例。

当然,我们在开发中最常用到的还是用XML布局文件进行布局的编写与调试,而用Java代码这种编写布局的方式在自定义控件的时候里才会经常被用到,而关于自定义控件方面的内容,我们会在之后的文章中提到,还请大家继续关注。

联系方式:

简书:WillFlow
优快云:WillFlow
微信公众号:WillFlow

微信公众号:WillFlow

二、Creo模型的功能函数 例如:模型(元件)的干涉........ 【代码】模型(元件)的干涉。 阅读详情

相关推荐

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 423

Android进阶——构建UI布局的多种方式总结

作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值。所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:**xml静态布局**、**java动态代码**、**HTML构建(借助WebView)**和第三方开源框架等。

最美不过,心中有梦,身旁有你! 1万+

宏基因组功能注释实战:从CAZyme到VFDB的完整流程(含数据库下载与脚本优化)

本文详细介绍了宏基因组功能注释的完整流程,涵盖CAZyme、eggNOG、CARD和VFDB四大核心数据库的实战应用。从环境配置、数据库下载与预处理到注释流程执行与优化,提供了全面的操作指南和脚本优化建议,帮助研究人员高效完成宏基因组数据分析。特别针对CAZyme注释等关键步骤给出了参数优化方案和常见问题排查方法。

weixin_29289821的博客 295

Android--UI布局

概述   布局(Layout)的概念是针对Activity的,Activity就是布满整个Android设备的窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,每个需要显示的Activity都需要在AndroidManifest.xml文件之中声明。   通常情况下,开发人员可以使用两种方式来创建UI组件,一种方式是使用XML方式来配置UI组件的相关属性,然后...

weixin_34266504的博客 148

MPN – 制造商物料编号(延伸)

此外,用户还可以在物料主数据中定义阻止MPN材料的原因,以及在采购订单创建时,是否可以将现有的MPN材料修改为其他MPN材料,从而实现对MPN材料的精细控制和管理。通过使用AMPL,用户可以指定每个MPN材料是否仅能为特定工厂或整个企业所有工厂采购、采购的时间段、是否必须属于特定修订级别、是否只能从特定制造商工厂采购以及是否被阻止及其原因。通过AMPL管理,企业可以规范采购流程,避免使用未经批准的材料,从而提高采购的透明度和效率,同时也为质量控制提供了保障‌。3、QM中的制造商物料。质量信息记录QI01。

yanzibing99的博客 2486

使用 DEM 模拟金属烧结过程

了解离散元素法 (DEM) 如何彻底改变烧结工艺,提高制造业的效率和精度。

jkh920184196的博客 1128

ui布局参数设置

android:layout_above 将该控件的底部置于给定ID的控件之上; android:layout_below 将该控件的底部置于给定ID的控件之下; android:layout_toLeftOf    将该控件的右边缘与给定ID的控件左边缘对齐; android:layout_toRightOf  将该控件的左边缘与给定ID的控件右边缘对齐; and

菲利克斯猫(Felix.mao)的IT技术专栏 1106

安卓app逆向破解脱壳教程

From:Hook 神器家族的 Frida 工具使用详解:https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frida (信抢红包):https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】:https://www.jianshu.com/p/2d755beb1c54 frida 官网文档:https://fr..

sinat_28371057的博客 2万+

Android为什么要用xml描述界面

XML可以使程序的内容和结构完全分离,可以实现内容管理和流程管理的彻底分离,降低开发耦合度,更便于项目的管理。 而且XML具有统一的标准语法,任何系统和产品所支持的XML文档,都具有统一的格式和语法,有利于跨平台移植,可扩展性强。 用Swing这样的模式, 耦合度高,相比XML维护成本会更高 xml是通用的国际标准(如果你可以创造出这样的标准也行),,现在几乎所有的计算机语言都会用到xml,

小地盘的诺克萨斯 3561

Playwright爬虫实战:破解动态网页懒加载与无限滚动

本文介绍了使用Playwright处理懒加载和无限滚动页面的完整解决方案。摘要如下: 问题分析:传统爬虫无法获取JS动态渲染内容,Playwright能模拟真实浏览器行为解决此类问题。 核心原理: 懒加载:资源延迟加载,滚动触发 无限滚动:滚动到底部异步加载新内容 技术方案: 分段滚动页面并等待加载 动态监测页面高度变化 合理设置等待和终止条件 代码实现: 提供图片懒加载和无限滚动列表的完整可运行代码 包含异常处理和性能优化建议 关键优势: 比传统爬虫更可靠 支持复杂交互场景 完善的错误处理机制 该方法已在

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 523

SAP BSIS:总账未清项表(Open Items)总账未清项 包含哪些业务 请给以举例说明

SAP总账未清项是指需要未来核销的会计行项目,仅适用于勾选"未清项管理"的总账科目。典型业务场景包括:供应商预付款(借方未清项)、员工备用金(借方未清项)、客户预收款(贷方未清项)和保险理赔(借方未清项)。系统通过表BSIS/BSAS跟踪未清项,支持明细追踪和账实核对。核心价值在于提供总账级别的明细管理能力,确保往来款项完整清账,简化对账流程,满足特殊业务管理需求。可通过FBL3N事务码查询和管理所有总账未清项。

金牌架构师 724

android关键方法介绍,2.1.3 Android中的几种UI排布方法介绍

关于XML基本语法介绍和XML语法总结可以参考这里:XML基本语法介绍、XML语法总结。在Android中,提供了一种非常简单、方便的方法用于控制UI界面。该方法采用XML文件来进行界面布局,从而将布局界面的代码和逻辑控制的Java代码分离开来,使用程序的结构更加清晰、明了,这种方法就是使用XML布局文件控制UI界面。使用XML布局文件控制UI界面可以分为以下两个关键步骤(1)在Android应用...

weixin_30109877的博客 154

萤石云cs刷机解绑固件

萤石CS-C2C-32WFR刷机包,萤石CS-C6TC刷机包,萤石CS-C6H刷机包,萤石猫眼产品等等。萤石云摄像头固件修改,绑定手机号解绑,更换序列号教程。

海康威视技术支持 2万+

Autojs基础-用户界面(ui)

脚本开发需要有界面与用户进行交互,许多脚本开发语言已经有自己的ui控件的使用方式,比如按键精灵的ui界面设置非常便捷。按键精灵的ui控件的取值和赋值方式都已经封装好了,但是autojs很多时候只提供控件,取值和赋值需要自己通过安卓进行封装,甚至需要自己手搓控件功能。以游戏为例,会有各种任务,我们可以根据选择的任务运行脚本,最好的就是多选框单选的方式,这样比较好看。但是,autojs没有让多选框单选的方式,我们又无法保证用户每次只选择一个任务,我们就需要手搓这个功能。

qq_55896432的博客 1868

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

(讲课篇)让小白都能明白的Android开发-1. 快速的创建一个安卓应用及基本的UI

大家好,我叫赵健,目前是一名Android开发工程师。今天开始我们一起步入Android开发的时间。本系列课程一共分为6节课,分别讲解了从事Android开发从知道到实际应用几个难点。本系列课程主要有以下几部分: 快速创建一个安卓应用以及基本UI的掌握 跨入Android大门的Kotlin语言篇 所有的动画都来源于这些操作 自定义UI及一些概念 快速接入第三方应用 分析一下优秀的开源程序 那么...

AdrianAndroid的专栏 1112

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

第3.1.3节 排布视图

Android的排布视图是UI很重要的一部分,相当于我们拿到一张白纸怎么样规划才是最合适,规划完我们才能在其上做画,尺寸才是最合适的,画家拿到画布用尺子测量获取画布的尺寸,做出最合理的规划,这事一个画家最基本的常识,所以经常作画的人叫做画家。这里说Android  UI设计,我们不做用笔画了,用程序代码,有时候觉得这是不是一种倒退,嗨!这没法说,应该是进步吧,至少我们敲代码都能出画,而且别人仿造也

feiyangxiaomi的专栏 1114

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Android UI基础教程》——2.3节排布视图

本节书摘来自异步社区《Android UI基础教程》一书中的第2章,第2.3节排布视图,作者 【美】Jason Ostrander,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.3 排布视图Android UI基础教程Android视图层次起始于一个布局容器。这些容器包含子视图并安排它们的相对位置。有几个具有不同特征的容器类型,以在不同情况下获...

weixin_34392906的博客 144

android 高级ui教程下载,android ui基础教程

是一本Android用户界面设计的基础入门图书。全书从最基础的技术概念开始介绍,深入讨论了UI设计的各项技术,涵盖了为应用程序创建UI的所有内容。本书不仅会告诉读者创建灵活布局的最佳方法,还会帮助开发者优化已有的UI界面,从而使他们的应用运行更加流畅,拥有最佳性能。学习完本书,读者可以自己创建一个成功的Android应用的UI界面。章节目录第1部分 Android UI基础第1章 入门1.1 He...

weixin_29254029的博客 170

Android UI– 排布视图

Android UI– 排布视图FrameLayout最简单的布局容器,这个容器完全不安排子试图,它只是简单到呈现每一个试图,从上到下摆下来。试图的顺序是基于它们在XML文件中的声明。试图在文件的后部声明的会被画在顶部,任何时候你想创建重叠试图时都可以使用这个试图。TableLayout该视图展示表格格式的数据,它把子视图放置成行和列,每一行都包含在一个TableRow容器中。一个TableLayo

lee_star1的博客 388

ui设计需要做android和苹果版本,安卓和IOS系统对于UI设计来说一样吗

安卓和IOS系统对于UI设计来说一样吗以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!安卓和IOS系统对于UI设计来说一样吗iOS和Android的区别,想了很久,也没想出太多,两个系统有些东西越来越通用,Android上,可实现所有效果,当然有些看上去iOS很像。长得和iOS很像的Android应用很多,好多大牌也这么...

weixin_33535402的博客 1119

Android安卓开发知识总结(3-7章)

常见的布局有线性布局、约束布局、表格布局、帧布局和相对布局。在《APP应用开发》课程中,我学习了各种UI界面交互功能的实现方法,如按钮点击事件、列表项点击事件、滑动操作、菜单项和对话框等。适用于需要相对定位的复杂布局,比如按钮相对于文本视图的排列。用于需要一个简单的容器来显示一个视图或需要在视图上叠加其他视图的情况,例如相机预览界面。帧布局简单地将所有子视图堆叠在一起,后添加的视图会覆盖在前面的视图之上。约束布局是一个功能强大的布局,可以通过设置约束来灵活地摆放子视图。

Tang2428的博客 697

vmos切换安卓版本_安卓之中还能运行安卓!神奇的安卓虚拟机App

PC上的虚拟机大家玩得多了,手机上的虚拟机不知道大家玩过没?PC上装了虚拟机后,等于操作系统中多了另一个系统,可以在虚拟机的系统中安装各类软件,和真机互不干扰。而很多安卓玩家不知道的是,其实在安卓平台上,也有虚拟机类的app!这款VMOS,便是安卓上的虚拟机,它可以让你在安卓系统中,运行另一个独立的安卓,一起来看看吧。VMOS官网:http://www.vmos.cn/在PC上,虚拟机类...

weixin_39926639的博客 8009

如何开发安卓_「安卓APP开发流程」安卓APP如何开发的?

21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统)、安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是安卓系统,而智能手机上的应用就是APP,那么安卓APP是如何开发的?安卓APP的开发流程是什么?让我们一起来看一下。安卓APP开发流程?1、需求沟通在app开发前,需要对app进行详细的分析。首先对a...

weixin_42204303的博客 3033

android梅花形布局,2.1.2 快速掌握 Android 中的六大布局

本篇我们介绍了六大布局Linear Layout(线性布局)、Frame Layout(帧布局)、Relative Layout(相对布局)、Absolute Layout(绝对布局)、Table Layout(表格布局)、Absolute Layout(绝对布局)的常用属性,然后结合实际开发中遇到的各种场景给出了相应的解决方案和示例用法,并且结合不同布局的各自特点给出了自身特有的属性(重复的属性...

weixin_39974030的博客 347

Android --- (6),界面布局。横竖屏切换。

时间:2012/11/19 教材:Beginning.Android.4.Application.Development 环境:eclipse 1.安卓用户界面的构建。 --活动通过用户界面和用户进行交互,活动本身不提供界面,而是用Views和ViewGroups来画出用户界面。 (1)屏幕组件的设置。 一个活动的交互界面由各种的小组件组成---Button,TextVie

theonlydk的专栏 1090

安卓和ios的ui设计区别_简析Android系统与ios系统界面设计区别

界面设计是人与机器之间传递和交换信息的媒介,近年来,随着信息技术与计算机技术的迅速发展,网络技术的突飞猛进,人机界面设计和开发已成为国际计算机界和设计界最为活跃的研究方向。UI即 User Interface(用户界面)的简称。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。本文主要简单分析Android系统与iOS系统界面设计区别。iOS和Android的区别,想了很久,也没想出特...

weixin_39822423的博客 3265
上一篇: 1.2 快速掌握 Android 中的六大布局
下一篇: 2.1 文本类控件的使用
WillFlow
博客等级 码龄11年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值