Android NumberPicker组件完整演示与小数处理

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:在Android应用开发中,NumberPicker组件用于选择数值,如设置数量或选择年份。本demo详细介绍了NumberPicker的创建、使用以及如何通过自定义Formatter使其支持带有两位小数的数值输入。演示了如何在布局文件中添加NumberPicker,并设置属性如最小值、最大值和默认值。通过继承AbstractFormatter并实现format方法,我们将整数值转换为带两位小数的字符串。此外,还展示了如何监听数值变化并进行相应处理。该demo还包括了对NumberPicker样式和颜色的自定义,使界面简洁美观。此实例对于需要精确数值输入的Android开发具有重要参考价值。 NumberPicker

1. NumberPicker组件介绍与使用

1.1 NumberPicker简介

NumberPicker是Android平台上的一个用于选择整数或日期的组件,它由一个递增和递减的按钮以及一个中间显示当前值的文本区域组成。相比于传统的Spinner和ListView,NumberPicker提供了更为直观和方便的选择方式,特别适用于需要快速选择数字或日期的场景。

1.2 NumberPicker的主要属性和方法

在使用NumberPicker之前,了解其主要的属性和方法是非常有必要的。NumberPicker主要属性包括: - minValue maxValue :设置NumberPicker可选择的最小值和最大值。 - value :获取或设置当前选择的值。 - setDisplayedValues() :允许为NumberPicker中的值自定义显示内容。

主要方法包括: - setOnValueChangedListener() :设置值变化监听器,用于监听用户的值变化操作。

1.3 NumberPicker的基本使用步骤

NumberPicker的使用非常简单。首先需要在布局文件中定义NumberPicker组件,然后在Activity或者Fragment中进行初始化,并设置相关属性和监听器。以下是一个简单的使用示例:

<!-- 在布局文件中定义NumberPicker -->
<NumberPicker
    android:id="@+id/numberPicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
// 在Activity中初始化NumberPicker并设置属性
NumberPicker numberPicker = findViewById(R.id.numberPicker);
numberPicker.setMinValue(1);
numberPicker.setMaxValue(100);
numberPicker.setValue(50);

// 设置值变化监听器
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        // 更新值时的逻辑处理,例如更新UI或其他操作
        Toast.makeText(getApplicationContext(), "Current value: " + newVal, Toast.LENGTH_SHORT).show();
    }
});

通过以上步骤,您就可以在Android应用中使用NumberPicker组件来实现数字选择功能了。接下来的章节将介绍如何处理NumberPicker的小数支持,以及如何自定义格式化显示等高级功能。

2. NumberPicker处理小数的实现方法

2.1 小数处理的技术背景和必要性

2.1.1 分析NumberPicker默认功能限制

Android原生的 NumberPicker 组件是一个用户界面元素,用于选择数字。它提供了向用户展示一个可滚动数字列表的方式。默认情况下, NumberPicker 仅支持整数。用户可以通过触摸屏幕上的滚动按钮来选择一个数字,而不能直接输入。这一限制在很多情况下影响了应用的灵活性。例如,在设置设备音量大小、选择时间间隔或在需要用户输入小数的金融应用中,这种限制尤为明显。

2.1.2 探讨小数在应用场景中的重要性

小数在实际应用中的需求非常高。从经济、科学到日常的方方面面,小数几乎无处不在。举个例子,在一个天气应用中,可能需要用户输入温度值,或者在一个模拟器应用中,用户需要设置特定的参数值。这些场景都需要支持小数的 NumberPicker 。因此,实现一个可以处理小数的 NumberPicker 是非常有价值的,能显著提升用户体验和应用的实用性。

2.2 实现小数支持的具体技术途径

2.2.1 修改NumberPicker源码以支持小数

为了使 NumberPicker 支持小数,一个可行的方法是直接修改其源代码。这需要对 NumberPicker 的工作原理有深入的理解,并且能够恰当地处理小数点的输入。以下是一个基于源码修改来支持小数的简单示例:

public class DecimalNumberPicker extends NumberPicker {
    private int decimalPlaces;
    private DecimalFormat decimalFormat;

    public DecimalNumberPicker(Context context) {
        super(context);
        // 初始化小数点位数和格式化对象
    }

    @Override
    public void setValue(int value) {
        // 设置值时将整数转换为字符串格式,保留小数点
    }

    @Override
    public int getValue() {
        // 获取值时将字符串格式转换为浮点数
    }
}

在上述代码中, DecimalNumberPicker 类继承自 NumberPicker 并重写了 setValue getValue 方法以支持小数。通过 DecimalFormat 对小数进行格式化处理,可以保留用户所设置的小数位数。这种方法虽然有效,但需要用户有修改Android组件源码的能力和权限。

2.2.2 使用内部类DecimalFormat进行小数转换

DecimalFormat 是一个强大的工具,可以用来格式化和解析十进制数。通过使用 DecimalFormat ,可以轻松实现小数的输入与显示,而无需修改 NumberPicker 的源码。以下是一个如何使用 DecimalFormat 实现小数转换的示例:

public class CustomNumberPicker extends NumberPicker {
    private DecimalFormat decimalFormat;

    public CustomNumberPicker(Context context) {
        super(context);
        decimalFormat = new DecimalFormat("#0.00");
        this.setFormatterTextWatcher(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // 不需要操作
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // 在文本变化时同步更新NumberPicker的值
            }

            @Override
            public void afterTextChanged(Editable s) {
                // 更新NumberPicker的值
                updateValueFromText();
            }
        });
    }

    private void updateValueFromText() {
        // 从文本中解析出浮点数,并设置为NumberPicker的值
    }
}

在这个例子中, CustomNumberPicker 通过 DecimalFormat 支持小数的显示和输入。当用户输入小数时, TextWatcher 监听文本的变化,并在 afterTextChanged 方法中将文本转换为浮点数,然后更新 NumberPicker 的值。

2.2.3 考虑不同Android版本的兼容性问题

在使用 NumberPicker 或者自定义实现小数支持的过程中,我们需要考虑到不同版本的Android系统可能存在的兼容性问题。Android系统版本众多,每个版本对API的支持都有可能不同。因此,为了确保应用的兼容性,开发者应该测试在不同版本的Android设备上运行的情况。

一种解决方案是在应用的 build.gradle 文件中声明支持的最低API级别,并且在代码中使用条件判断,来检查系统版本并执行相适应的代码。例如:

android {
    compileSdkVersion 30
    defaultConfig {
        minSdkVersion 16 // 设置最低支持Android版本
        targetSdkVersion 30
    }
}

通过这种方式,你可以保证应用在不同版本的Android设备上都能正常运行,即使某些功能在老版本的Android上无法使用或者需要适配代码。

通过以上技术途径,我们可以实现一个支持小数的 NumberPicker 。无论是通过直接修改源码、使用内部类 DecimalFormat 进行小数转换,还是考虑不同Android版本的兼容性问题,开发者都应该结合实际需求和资源选择最合适的方案。这将为用户带来更丰富的交互体验和更精确的数据输入。

3. 自定义Formatter以支持浮点数

3.1 自定义Formatter的理论基础

3.1.1 分析Formatter在NumberPicker中的作用

Formatter在Android的NumberPicker组件中扮演了重要的角色,它的主要任务是定义数字的显示格式。NumberPicker允许用户选择一个数值范围内的值,而Formatter则规定了这些值应该如何被显示。通过Formatter,开发者可以实现数值的格式化显示,比如保留小数点后两位或格式化为货币、百分比等。

在自定义Formatter之前,需要理解其在NumberPicker中的工作原理。通常情况下,NumberPicker提供了默认的整数格式化方式。但是,如果需要处理小数,则需要自定义Formatter来实现。这是因为默认的Formatter并不支持浮点数的显示。

3.1.2 探讨实现浮点数显示的关键点

实现浮点数显示的关键在于创建一个能够识别和格式化小数的Formatter。关键点包括:

  • 解析小数: 为了在NumberPicker中处理小数,需要定义如何从用户输入中解析小数。
  • 显示格式: 确定用户界面中需要显示的小数点后位数。
  • 数值范围: 定义NumberPicker能处理的最小值和最大值。
  • 用户交互: 提供一个用户友好的界面,使用户能够理解如何操作NumberPicker来输入小数值。

3.2 自定义Formatter的实践步骤

3.2.1 编写自定义的DecimalDigitsInputFilter

为了实现浮点数的输入和显示,第一步是在输入级别上限制和格式化用户输入。这可以通过创建一个自定义的 DecimalDigitsInputFilter 来实现,它继承自 InputFilter 类。下面的代码展示了如何创建这样一个Filter:

public class DecimalDigitsInputFilter implements InputFilter {
    private int mPrecision;
    private boolean mDecimalSeparator;

    public DecimalDigitsInputFilter(int precision, boolean allowDecimalSeparator) {
        mPrecision = precision;
        mDecimalSeparator = allowDecimalSeparator;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (mDecimalSeparator) {
            // 支持一个小数点
            if (dest.toString().contains(".") && source.toString().contains(".")) {
                return "";
            }
        }

        Pattern digit = Pattern.compile("[0-9]*");
        Matcher matcher = digit.matcher(source);
        if (!matcher.matches()) return ""; // 如果输入不是数字,则不允许输入

        String result = dest.subSequence(0, dstart)
                + source.toString()
                + dest.subSequence(dend, dest.length());
        intDot = result.length() - 1 - result.lastIndexOf("."); // 计算小数点后位数
        if (intDot > mPrecision) { // 如果位数过多,则不接受输入
            return "";
        }

        return null; // 表示接受输入
    }
}

这段代码中, mPrecision 定义了小数点后可以接受的最大位数,而 mDecimalSeparator 决定是否允许输入小数点。当用户尝试输入时, filter 方法会被调用,它会检查输入是否符合小数点后位数的要求,并在不符合要求时阻止输入。

3.2.2 集成自定义Formatter到NumberPicker

创建完 DecimalDigitsInputFilter 之后,下一步是在NumberPicker组件中集成这个自定义Filter。可以通过在XML布局文件中设置 android:inputType 属性来达到这个目的,或者在代码中设置 setInputType() 方法。示例如下:

numberPicker.setMinValue(0);
numberPicker.setMaxValue(100);
numberPicker.setInputType(InputType.TYPE_CLASS_PHONE);

InputFilter[] filters = {new DecimalDigitsInputFilter(2, true)};
numberPicker.setFilters(filters);

在这个例子中,我们设置了NumberPicker的最小值为0,最大值为100,并且接受电话号码输入类型,这将启用数字键盘。然后我们创建了一个 DecimalDigitsInputFilter 的实例,允许小数点后两位,最终将其设置为NumberPicker的过滤器。

3.2.3 测试并验证自定义Formatter的效果

最后一步是在应用中测试自定义的Formatter,确保它按照预期工作。测试需要验证以下几点:

  • 当用户输入数字时,NumberPicker是否正确地显示了格式化后的小数。
  • 如果输入了超过允许的小数点后位数的数字,NumberPicker是否阻止了这个输入。
  • 在应用中对NumberPicker的值进行修改时,界面是否相应地更新。

测试时可以使用模拟器或真实设备来输入不同的值,观察NumberPicker的反应。也可以编写单元测试来自动化这个过程,确保在应用迭代更新过程中,自定义Formatter的行为仍然保持一致。

通过以上步骤,我们可以为NumberPicker实现自定义的浮点数支持,使得用户能够在应用中更灵活地处理数字输入,满足更多样化的业务需求。

4. NumberPicker样式和颜色的自定义

4.1 样式自定义的理论基础和设计理念

4.1.1 分析Android UI样式的灵活多变性

Android系统允许开发者进行广泛的界面定制,以便为用户提供独特的用户体验。NumberPicker作为一个用户交互组件,其样式自定义同样体现了这一灵活性。了解和掌握样式的自定义,可以使得NumberPicker更好地融入应用的整体设计风格中。通过样式自定义,开发者可以更改NumberPicker的尺寸、颜色、边距和填充等属性,从而使其在应用中看起来和谐且专业。

4.1.2 探索NumberPicker样式的可定制性

NumberPicker组件的样式自定义通常涉及两个方面:XML样式定义和程序代码动态调整。在XML中定义NumberPicker样式,可以让开发者直接在资源文件中修改参数,如颜色、文字大小等。而程序代码动态调整则提供了更大的灵活性,特别是在运行时根据特定条件改变NumberPicker的外观。掌握这些方法,可以帮助开发者创建出既美观又实用的NumberPicker组件。

4.2 样式和颜色自定义的实践操作

4.2.1 使用XML资源文件定义NumberPicker样式

通过XML定义NumberPicker样式是自定义样式的首选方法。这不仅让样式定义更清晰,而且有利于项目资源的管理和维护。以下是一个基本的NumberPicker样式定义示例:

<!-- res/values/styles.xml -->
<style name="CustomNumberPickerStyle" parent="Widget.AppCompat.NumberPicker">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">@color/numberPickerTextColor</item>
    <item name="android:background">@drawable/number_picker_background</item>
</style>

在上述代码中,我们定义了一个自定义的NumberPicker样式,继承自系统的 Widget.AppCompat.NumberPicker 。然后分别设置了宽度、高度、文字颜色以及背景。其中,背景我们使用了一个名为 number_picker_background 的可绘制资源,这个资源可以根据需要定制成各种样式。

接下来,我们需要在 res/drawable 文件夹中创建一个名为 number_picker_background.xml 的可绘制资源文件:

<!-- res/drawable/number_picker_background.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/number_picker_pressed" />
    <item android:drawable="@drawable/number_picker_normal" />
</selector>

这里定义了一个选择器,根据NumberPicker是否被按下显示不同的背景。

4.2.2 通过代码动态调整NumberPicker的颜色主题

虽然使用XML资源文件定义样式是推荐的方案,但在运行时根据应用状态改变NumberPicker的颜色主题就需要通过代码来实现了。以下是如何动态设置NumberPicker颜色的示例代码:

NumberPicker numberPicker = findViewById(R.id.number_picker);
numberPicker.setTextColor(ContextCompat.getColor(this, R.color.numberPickerTextColor));
numberPicker.setValigner(new Center劲aligner(numberPicker));
numberPicker.setDisplayedValues(numbersArray);

上述代码片段中,我们首先通过 findViewById 获取到NumberPicker组件的实例。然后,我们使用 setTextColor 方法动态设置NumberPicker的文字颜色。最后,我们设置了一个值对齐器,确保数字能够居中显示,增加了NumberPicker的可读性。

4.2.3 测试样式的兼容性和性能影响

自定义NumberPicker样式后,需要对其进行详细的测试,以确保其在不同设备和Android版本上都能正常工作。开发者可以通过自动化测试脚本来检查样式是否按照预期显示,并确保没有出现布局错乱等问题。同时,性能测试也十分必要,需要监测自定义样式是否对滚动性能产生负面影响,特别是在包含大量选项的NumberPicker中。

| 测试项 | 目的 | 方法 | |--------------|----------------------------------|------------------------------------------| | 兼容性测试 | 确保在不同设备和Android版本上的显示一致性 | 使用Android Studio的Profiler工具监控滚动性能 | | 性能测试 | 评估自定义样式对性能的影响 | 使用性能分析工具测试不同配置下的滚动响应时间 |

对于性能测试,如果发现自定义样式对性能有显著影响,开发者可能需要优化样式资源,例如减小图片资源大小或者使用更简洁的布局结构。通过这些测试,我们能够确保NumberPicker在满足设计需求的同时,也能提供良好的用户体验。

通过上述实践操作,我们可以实现NumberPicker的样式和颜色自定义。这不仅增强了界面的美观性,也提升了用户的交互体验,从而使得应用的整体品质得到了提升。在接下来的内容中,我们将进一步探索如何监听NumberPicker值的变化,并处理这些变化以满足应用的特定需求。

5. 监听NumberPicker值变化并处理

5.1 值变化监听的理论分析

5.1.1 分析NumberPicker的事件监听机制

在Android开发中,监听用户交互是一个非常关键的部分,它能够帮助开发者实现应用的动态性和互动性。NumberPicker组件也不例外,它允许开发者监听用户的值变化动作,以实现更丰富的交互逻辑。

NumberPicker的值变化监听通常通过一个事件监听器接口 OnValueChangeListener 来实现。该接口包含两个方法: onValueChange onBindEditText ,其中 onValueChange 方法最为关键,因为它会在NumberPicker的值发生变化时被调用。开发者可以通过这个方法获取到新的值,并执行相应的逻辑,如更新界面显示、验证输入等。

5.1.2 探索值变化监听对用户交互的影响

监听值的变化,能够极大地增强用户的交互体验。具体来说,当用户通过触摸滑轮或点击按钮来改变NumberPicker的值时,应用可以立即响应这些变化,并通过界面反馈给用户。例如,可以在界面上实时更新显示一个价格或一个参数值,或者在用户输入到达一定条件时提供提示信息。

此外,监听值的变化还可以实现更高级的功能,比如数据验证、用户操作的回溯记录等。开发者可以利用监听机制,在值改变之前或之后加入特定的逻辑,从而控制NumberPicker的行为,甚至能够用于防止用户输入无效或不期望的数据。

5.2 实现值变化监听的具体技术手段

5.2.1 设置监听器接口OnValueChangeListener

首先,需要为NumberPicker设置一个 OnValueChangeListener 监听器。这个监听器会在NumberPicker的值发生变化时被触发。

NumberPicker numberPicker = findViewById(R.id.numberPicker);
numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        // 这里可以获取到旧值oldVal和新值newVal
        Log.d("NumberPicker", "旧值: " + oldVal + ", 新值: " + newVal);
        // 在这里根据值变化执行一些操作,比如更新UI或处理数据
    }
});

5.2.2 处理监听事件中的值获取和更新逻辑

onValueChange 方法中,可以获取到NumberPicker的旧值和新值,从而处理值变化的逻辑。下面的代码演示了如何在值变化时更新UI并执行数据处理:

// 假设我们有一个TextView用于显示NumberPicker的值
TextView textView = findViewById(R.id.textView);

numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        textView.setText(String.valueOf(newVal)); // 更新TextView显示新值

        // 这里可以添加更多逻辑,比如保存值到数据库,进行条件判断等
        // ...
    }
});

5.2.3 实例化监听器并集成到应用中

最后,需要将设置好的监听器实例化并添加到NumberPicker组件上,这样监听器才能开始工作。

// 以下是将监听器集成到应用的代码片段
// ...

// 集成监听器到应用
numberPicker.setOnValueChangedListener(yourValueChangeListener);

在实际应用中,可以根据具体的业务逻辑来实现监听器中的逻辑,以确保应用能够响应用户输入的变化,并做出正确的反馈和处理。此外,还可以在监听器中加入异常处理、输入验证等,确保应用的健壮性。

6. 综合应用实例分析

6.1 构建NumberPicker应用场景的需求分析

6.1.1 描述一个具体的使用场景

设想一个应用场景,其中需要用户在应用中选择一个范围内的浮点数值,例如在一个金融应用中,用户需要设置一个贷款的年利率。该利率可以是小数形式,例如3.5%,并且应用需要根据用户的输入显示相应的百分比。考虑到利率是一个敏感并且频繁更改的数值,它需要通过NumberPicker组件来选择,以提供更精确和直观的输入方式。

6.1.2 分析用户交互流程和需求要点

用户交互流程如下:

  1. 打开应用,进入贷款设置界面。
  2. 通过NumberPicker选择年利率。
  3. 用户选择或更改利率后,应用应立即反映利率变化对贷款总额的影响。
  4. 用户确认利率后,应用保存设置并进行后续流程。

需求要点包括:

  • NumberPicker组件能够支持浮点数输入。
  • 输入值应实时反映,并更新相关的财务计算。
  • 用户界面应直观易懂,提供良好的用户体验。

6.2 实现NumberPicker应用场景的步骤

6.2.1 设计应用的界面布局和组件关系

在设计界面布局时,可以使用XML来定义NumberPicker组件以及其他UI元素的关系。以下是NumberPicker组件和一个显示利率的TextView的设计代码示例:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvInterestRate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Interest Rate: 0.00%" />

    <NumberPicker
        android:id="@+id/npInterestRate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:wrapSelectorWheel="false"
        android:wheelItemCount="11"
        android:maxValue="10"
        android:minValue="0"
        android:scrollIncrement="0.1" />
</LinearLayout>

6.2.2 集成NumberPicker并进行配置

在Activity中,我们需要进行以下步骤来集成和配置NumberPicker:

  1. 在Activity的 onCreate 方法中,通过 findViewById 获取到XML中定义的NumberPicker实例。
  2. 设置NumberPicker的最小值、最大值以及每次增减的间隔值。
  3. 配置NumberPicker以支持浮点数输入,并设置监听器来处理值的变化。
NumberPicker npInterestRate = findViewById(R.id.npInterestRate);
npInterestRate.setMinValue(0); // 最小值0%
npInterestRate.setMaxValue(1000); // 最大值10%
npInterestRate.setDisplayedValues(getFormattedRates(npInterestRate.getMaxValue()));
npInterestRate.setFormatter(new NumberPicker.Formatter() {
    @Override
    public String format(int value) {
        return getFormattedRate(value);
    }
});
npInterestRate.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        // 更新利率显示
        TextView tvInterestRate = findViewById(R.id.tvInterestRate);
        tvInterestRate.setText("Interest Rate: " + getFormattedRate(newVal));
        // 更新相关财务计算逻辑
    }
});

6.2.3 测试和优化最终的应用体验

在将NumberPicker集成到应用中后,进行彻底的测试以确保用户体验。测试应包括:

  • 选择不同的利率值,检查是否准确显示。
  • 观察界面上显示的总利率是否根据NumberPicker的值实时更新。
  • 确保在不同设备和Android版本上的兼容性和性能。

测试后,根据反馈进行优化调整,确保应用界面的响应性和精确度。

在这一章节中,我们介绍了一个使用NumberPicker的综合应用场景,并且详细说明了界面布局设计、组件配置以及测试和优化的步骤。通过这样的实例分析,我们可以看到NumberPicker组件在实际开发中的应用和潜在优化点。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:在Android应用开发中,NumberPicker组件用于选择数值,如设置数量或选择年份。本demo详细介绍了NumberPicker的创建、使用以及如何通过自定义Formatter使其支持带有两位小数的数值输入。演示了如何在布局文件中添加NumberPicker,并设置属性如最小值、最大值和默认值。通过继承AbstractFormatter并实现format方法,我们将整数值转换为带两位小数的字符串。此外,还展示了如何监听数值变化并进行相应处理。该demo还包括了对NumberPicker样式和颜色的自定义,使界面简洁美观。此实例对于需要精确数值输入的Android开发具有重要参考价值。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值