6为实现出色Android用户体验而做的事情

最受欢迎的Android应用程序有一些共同点:它们都提供了出色的用户体验。 在这篇文章中,我将分享一些技巧,以帮助您的应用脱颖而出。

无论您打算使用哪种类型的应用程序,也不管您的目标受众是什么,设计出色的用户体验都可以帮助确保您的应用程序成功。 在本文中,我将分享您应该,不应该做的六件事,以确保您的应用程序为最终用户提供最佳体验。

由于创建和启动Android应用程序是一个多步骤的过程,因此,我将涉及Android开发生命周期的每个部分-从就应支持的Android版本做出艰难的决定,到创建一款吸引人的产品。遍及全球的受众,一直到分析应用程序的发布后效果。

1.不要急于尝试支持每个版本的Android

想要让您的应用程序尽可能多地出现在用户面前是很自然的,但不要陷入假设支持更多版本的Android 始终是最佳方法的陷阱。

吸引大量受众的关键是提供最佳的用户体验,而将目光投向尽可能多的Android版本实际上会损害整体用户体验。

主要问题是,随着您继续回顾Android的发行历史,要使您的应用在早期版本中正常运行将变得越来越困难。

有时,您的应用可能会与早期版本的Android不兼容,这很明显。 例如,如果您的应用程序绝对需要访问低功耗蓝牙(BLE),那么您的应用程序将无法在Android 4.3之前的任何版本上运行,Android 4.3是BLE支持已添加到Android平台的版本。

但是,有时这行可能不太清晰,您可能会争论要修改还是删除非关键功能,以便创建可以在特定版本的Android上运行的功能。 较小的妥协可能会逐渐削弱用户体验的质量,因此请务必评估这些更改对用户的影响。

此外,为每个不同版本的Android定制,优化和测试应用程序都需要时间和精力,因此您还需要问自己,这项投资是否值得潜在的回报。 基本上,通过支持每个版本的Android,您可能会获得多少用户? 通过查看Google信息中心的统计信息,您可以了解每个Android平台版本正在运行多少Android设备。

最终,没有普遍的对错答案,因此您需要权衡利弊,并确定最适合您的特定项目的方案。

确定要支持的Android版本后,请使用minSdkVersion (您的应用兼容的最低API), targetSdkVersion (您拥有的最高API级别)将此信息添加到模块级build.gradle文件中测试您的应用程序)和compileSdkVersion (Gradle用来编译您的应用程序的Android SDK版本)。

为了确保您的应用受益于最新的Android功能,同时保持与早期版本的兼容性,建议您将minSdkValue设置minSdkValue尽可能低,同时将targetSdkVersioncompileSdkVersion设置为最新版本的Android SDK。

2.做多屏设计

当您使用Android应用程序时,通常会花费大部分时间在自己的Android智能手机或平板电脑上测试该应用程序。 特别是在应用开发的早期阶段,创建多个Android虚拟设备(AVD)可能是您的最后选择。

但是,不要忘了大局! 挂在身前的一个屏幕的设计很容易,但是必须确保您的应用在各种Android设备上看起来都不错并且可以正常运行。

Android系统会自动缩放您的布局,可绘制对象和其他资源,以便它们以适合当前屏幕的大小进行渲染,但是为了获得最佳用户体验,您应该以幻想自己的应用程序是为用户的特定设备设计的。 仅仅依靠自动缩放并不会减少它!

为了确保您的应用在各种设备上都能提供最佳的用户体验,您需要提供针对不同设备进行了优化的备用资源,例如针对Android通用密度桶的可绘制对象以及针对横向优化的备用布局模式。

创建备用资源后,您需要创建用适当的配置限定符标记的备用目录,然后将资源放入这些目录中,例如, res / layout-land目录将包含以下布局:为横向而设计。 然后,Android系统将在运行时自动加载与当前屏幕配置最匹配的资源。

尽管大多数配置限定符相对简单,但是提供针对不同屏幕尺寸的资源要稍微复杂一些,需要您指定确切的dpi值,系统应在该值上开始使用此资源。 因此,您基本上需要告诉系统:“当我的应用程序以800dpi或更多可用屏幕宽度显示在设备上时,我想使用布局。”

您可以通过在各种不同的AVD上测试您的应用并记下默认资源所困扰的所有屏幕尺寸来得出这些值,例如,一旦设备降到低于一定的dpi阈值。

您可以在项目中使用三个屏幕尺寸配置限定符:

  • minimumWidth sw <value> dp 。 允许您指定系统可以使用此目录中的资源之前必须可用的最小水平空间。 例如,如果您有一组需要800dpi或更高的布局,则可以创建一个res / layout-sw800dp目录。 请注意,设备的smallestWidth是一个固定值,当用户在纵向和横向之间切换设备时,该值不变。

  • 可用屏幕宽度w <value> dp 。 系统可以使用这些资源之前必须可用的最小水平空间。 当用户在纵向和横向模式之间切换时,设备的w<value>dp改变。

  • 可用屏幕高度:h <value> dp 。 系统可以使用这些资源之前必须提供的最小高度。 设备的h<value>dp值将根据用户是横向还是纵向握持设备而变化。

针对多屏幕进行设计主要是关于创建项目资源的备用版本并将其添加到适当的目录中,然后进行冲洗和重复。 但是,在创建这些备用资源时,可以使用一些其他技巧,这些技巧可以真正帮助您产生一种幻想,即您的应用程序是为用户的特定设备设计的:

  • 结合使用特定于密度的可绘制图像和9色块图像 。 如果系统需要调整图像大小以适合当前屏幕,则默认情况下它将调整整个图像的大小,这可能会导致图像模糊,像素化或外观怪异。 为了获得最佳效果,应通过将项目的可绘制对象作为9色块图像交付来指定系统在需要调整图像大小时应复制的确切像素。 为每个可绘制对象提供多个9补丁版本,其中每个9补丁针对不同的屏幕密度,然后系统将加载最适合当前屏幕密度的9补丁图像, 拉伸9补丁图像的“可拉伸” '部分(如果需要)。 您可以使用任何PNG编辑器来创建9补丁图像,也可以使用Android SDK中包含的Draw 9补丁编辑器(您可以在sdk / tools / Draw9patch.bat中找到它)。

  • 创建多个dimens.xml文件 。 建议您在单独的dimens.xml文件中定义布局的值,而不是将其硬编码到项目中。 但是,您可以更进一步,并创建针对不同屏幕尺寸和密度的多个dimens.xml文件。 例如,您可以创建一个values-ldpi / dimens.xml文件,在其中定义应用程序安装在“低”密度类别的设备上时应使用的值。 然后,系统将为当前设备加载适当的尺寸,并将其应用于您的布局。

  • 考虑使用片段 。 片段为您提供了一种将单个“ Activity ”划分为单独的组件的方式,然后您可以根据当前屏幕配置以不同的方式显示它们。 例如,当您的应用安装在屏幕较大的设备上时,您可以选择在多窗格布局中并排显示多个片段,而在空间有限时,可以选择作为单独的活动。 将片段添加到布局的最简单方法是在布局资源文件中插入<fragment>元素。 或者,您可以通过应用程序代码将片段添加到布局中-这种方法可能更复杂,但是它为您提供了在运行时添加,删除或替换片段的更多灵活性。

3.考虑支持不同的语言

Android是一个全球性操作系统,因此,如果您的应用程序要为全球受众提供最佳的用户体验,则应考虑将应用程序本地化为不同的语言以及可能的不同区域。

通常,对应用程序进行本地化的最大部分是将项目的strings.xml文件转换为您要支持的其他语言。 除非您精通目标语言,否则您将需要翻译人员的帮助。 如果您不介意任何人,那么开发者控制台的Google Play应用翻译服务可以为您指明潜在翻译者的方向。

您会在Google Play开发者控制台中找到购买翻译选项

选择翻译器后,应仔细检查自己的strings.xml文件,然后再将其发送进行翻译。 请检查拼写错误和错别字等内容,并确保您的strings.xml的格式设置易于阅读,同时请注意您的翻译者可能不是Android开发人员。

您还应该提供尽可能多的上下文,因此请确保在每个字符串中添加注释,以说明该字符串的用途,在应用程序中出现的时间和地点,以及翻译人员需要注意的所有限制。 例如,如果字符串需要保持少于10个字符的长度以适合其在布局中分配的空间,那么翻译人员需要注意这一点!

转换程序返回翻译后的strings.xml文件后,您需要为每个备用文件创建一个目录,这意味着您需要确定要使用的配置限定符。

语言环境配置限定符由一个ISO代码 (本质上是一种语言代码)和一个可选的国家或地区代码组成 ,其后是小写的r 。 例如,如果您想为位于加拿大( can )的人提供法语( fr )文本,则可以创建一个res / values-fr-rcan目录。

如果您确实提供了本地化的文本,请记住,某些字符串在翻译过程中可能会显着扩展或收缩,因此您需要测试布局是否可以容纳项目字符串的所有版本。

测试本地化资源的最简单方法是将应用程序安装在AVD上,然后模拟不同的位置和语言设置。 此时,系统将加载资源的本地化版本并将其显示在您的应用程序中。

您可以通过发出以下Android调试桥(adb)命令来更改正在运行的AVD中的区域设置:

adb shell

其次是:

setprop persist.sys.locale fr-CAN;stop;sleep 5;start

注意,您需要用要测试的任何配置限定符替换fr-CAN

如果您在设计应用程序时考虑了最佳实践,那么布局应足够灵活以显示大多数本地化字符串。 但是,如果字符串的长度变化很大,那么您可能需要提供针对不同语言环境优化的备用布局。

虽然项目的strings.xml文件通常是您需要本地化的主要资源,但您还应该考虑是否需要翻译其他资源,例如包含文本,包含对话的视频或音频的画图或任何资源这可能不适用于您要定位的语言环境。

一旦确定自己已经提供了所有必要的本地化资源并执行了自己的测试,就应该考虑在每个目标语言环境中安排以母语为母语的人进行Beta测试。 母语为母语的人常常会冒犯甚至是翻译员可能会忽略的错误,并且可能会为您提供一些有关如何使您的应用程序对特定受众群体更具吸引力的建议。 您可以通过Google Play开发者控制台安排这种有针对性的Beta测试。

当您终于准备好启动应用程序时,请确保您花时间创建应用程序的Google Play页面的本地化版本,因为这将立即使您的应用程序对正在浏览Google Play商店的国际用户更具吸引力。 您还应该尝试提供屏幕截图,以清楚地显示应用程序中的本地化文本,这样用户就不会怀疑您是否刚刚翻译了应用程序的Google Play页面,而不是应用程序中的实际文本。

启动应用程序后,辛苦的工作不会结束! 一旦吸引了国际观众,您就需要通过提供多种语言的持续支持来吸引他们,即使这意味着诉诸于Google Translate之类的机器翻译。 至少,您应密切注意Google Play的评论,以了解特定地区的用户是否报告了类似的问题,这可能表明您的一个或多个应用程序的本地化资源存在问题。

4.不要忘记辅助功能!

作为应用程序开发人员,您需要确保每个人都可以享受使用您的应用程序的乐趣,因此重要的是要考虑那些可能没有声音,色彩或其他视觉效果的人或与之交互的人对您的应用程序的可访问性他们的Android设备通过屏幕阅读器之类的辅助功能工具。

Android在设计时考虑了可访问性,因此它具有许多内置的可访问性功能,您可以在无需对应用程序代码进行任何根本更改的情况下使用它们。

让我们看一下您可以对项目进行的一些细微调整,这些调整将对应用程序的可访问性产生巨大影响:

考虑提供其他内容描述

话语提示之类的辅助功能服务会大声朗读屏幕上的文本,使之成为帮助具有视觉相关问题的用户与其Android设备进行交互的重要工具。

设计Android应用程序时,应考虑用户仅使用其屏幕上的文本即可轻松导航您的应用程序。 如果确实需要提供其他上下文,则可以向应用程序的任何UI组件添加内容描述,然后由TalkBack等服务大声朗读。 要添加内容描述,请打开项目的布局资源文件,然后将android:contentDescription属性添加到相关的UI组件中,然后添加要使用的描述。

支持重点导航

视力受限或手动灵活性受限的用户可能会发现,它更容易使用方向控制器(例如触控板,D-pad或键盘或模拟方向控制器的软件)与其设备进行交互。 为了确保您的应用程序支持这种焦点导航 ,您需要向每个应用程序的导航组件添加android:focusable="true”属性。

当用户使用方向控件浏览您的应用程序时,焦点将按照一种算法自动确定的顺序从一个UI元素传递到另一个UI元素。 不过,您可以覆盖这些默认设置,并通过向用户界面组件中添加以下XML属性,来指定当用户朝特定方向移动时哪个UI组件应获得焦点: android:nextFocusUpandroid:nextFocusDownandroid:nextFocusLeftandroid:nextFocusRight 。 例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/activity_main"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.jessicathornsby.myapplication.MainActivity">

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="74dp"
       android:text="Hello World!"
       android:id="@+id/textView"
       android:focusable="true"
       android:nextFocusDown="@+id/checkBox"
       />

   <CheckBox
       android:text="CheckBox"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:id="@+id/checkBox"
       android:layout_weight="1"
       android:focusable="true"
       android:nextFocusUp="@+id/textView"
       />

</LinearLayout>

使文本可调整大小

有视力障碍的用户可以选择增加在其设备上显示的字体的大小。 为确保所有字体更改都反映在您的应用程序中,请以比例像素定义文本,并且别忘了测试一下Android各种字体大小对应用程序UI的影响,以防万一您需要对自己的应用程序进行一些调整布局。

使用建议的触摸目标尺寸

为了帮助具有手动灵活性的人们导航您的应用程序,建议您将所有触摸目标设置为48 x 48 dpi或更高,并确保这些目标之间的间隔至少为8 dpi。

考虑禁用超时控件

在经过一定时间后,某些UI组件可能会自动消失-例如,视频播放了片刻后,视频播放控件通常会消失。

问题在于,诸如对讲之类的可访问性服务只有在用户将注意力集中在控件上时才会读取控件,因此,如果超时控件在用户有机会专注于控件之前就消失了,那么他们将不会意识到这些控件控件甚至存在。 因此,无论何时启用辅助功能,您都应考虑将超时控件升级为永久控件。

5.测试您的应用程序的性能

仅仅因为您的应用程序不会在测试期间崩溃或引发任何错误,并不表示它运行良好,因为某些性能问题可能很隐蔽,并且在常规测试期间很难发现。 没有人喜欢使用需要永久加载的应用程序,在尝试与之交互时会滞后以及吞噬可用内存的过程,因此在发布应用程序之前,应始终对其进行一系列基于性能的测试。

Android SDK随附了多种工具,可用于专门测试应用程序的性能。 在本节中,我们将介绍一些您肯定要使用的功能; 但是,还有更多值得研究的内容(您会在Android官方文档中找到更多信息)。

请注意,所有这些工具都只能与正在运行的应用程序通信,因此您需要确保要测试的应用程序安装在与开发计算机连接的AVD或物理设备上。

在我们开始之前,值得注意的是,如果您确实确定应用程序的性能存在问题,建议您在尝试修复此问题之前先对代码进行计时。 在您相信问题已解决之后,您可以再次计时代码,并且您将能够准确地看到所做的更改对应用程序的性能产生什么影响。

您可以使用TraceView为代码计时,您可以通过选择Android Device Monitor的DDMS选项卡,然后选择要分析的设备和进程,然后单击Start Method Profiling图标(将光标置于下面的位置)来访问该代码。屏幕截图)。

在Android设备监视器中,选择DDMS选项卡,然后选择Start Method Profiling

此时,您可以选择基于跟踪的概要分析 (跟踪每个方法的进入和退出)或基于样本的概要分析 (以您指定的频率收集调用堆栈)。 做出选择后,请花一些时间与您的应用进行交互。 当准备好查看结果时,可以通过单击“ 停止方法分析”图标将跟踪文件加载到查看器中。 跟踪文件将每个线程的执行显示为单独的一行,因此您可以确切地看到项目的每个部分需要运行多长时间。

识别透支

当系统绘制应用程序的UI时,它从最高级别的容器开始,然后遍历视图层次结构,从而有可能在称为“透支”的过程中在彼此之上绘制视图。 虽然不可避免会有一定数量的透支,但是您可以通过识别并删除任何过多或不必要的透支实例来减少应用渲染所需的时间。

如果您的设备运行的是Android 4.2或更高版本,则可以通过选择设置>开发人员选项>调试GPU覆盖>选择覆盖区域来检查该设备上安装的任何应用中存在的覆盖过量 。 然后,系统将在屏幕的每个区域添加彩色叠加层,以指示每个像素的绘制次数:

  • 没有颜色。 此像素已绘制一次。

  • 蓝色。 透支1倍。 这些像素被绘制两次。

  • 绿色。 透支2倍。

  • 红灯。 透支3倍。

  • 深红。 透支4倍或更多。

大多数应用程序都包含一定程度的透支,但是如果您在应用程序中发现较大的透支部分,则应查看是否有任何方法可以减少每个像素被重绘的次数,并且一种有效的方法是消除不必要的视图。

Android设备监视器的“层次结构查看器”提供了应用程序整个视图层次结构的高级概述,可帮助您确定对用户在屏幕上看到的最终渲染图像没有任何贡献的视图。

要启动“层次结构查看器”,请单击“ Android设备监视器”的“ 层次结构视图”按钮,然后选择要检查的设备和活动,然后选择蓝色将视图层次结构加载到树形视图图标中。

在Android设备监视器中,选择“层次结构视图”按钮,然后将视图层次结构加载到树形视图中

您可能还希望将Hierarchy Viewer输出导出为Photoshop文档。 这是一种用于识别对最终UI没有任何贡献的视图的特别有效的技术,因为每个视图都显示为单独的Photoshop图层,这意味着您可以隐藏和显示每个图层,并确切了解这将对最终UI产生什么影响。用户在屏幕上看到的图像。

要创建PSD文档,只需单击“ 捕获窗口图层作为Photoshop文档”图标。

发现内存泄漏

垃圾回收(GC)是一种正常的系统行为,对于确保您的应用和整个设备继续平稳运行非常重要。

但是,如果您的应用程序不能正确管理内存(可能是在短时间内泄漏内存或分配大量对象),则这可能会触发更频繁的GC事件,并且运行时间也更长。 您可以在Android Studio主窗口中查看应用程序中发生了哪些GC事件。 打开窗口底部的“ Android监视器”选项卡,然后打开“ 监视器”选项卡。 然后,“内存监视器”工具将自动开始记录应用程序的内存使用情况。

选择Android Studio主窗口底部的Android Monitor标签,然后选择Monitors标签

如果您继续与您的应用进行交互,那么最终您会发现分配的内存量突然减少,表明发生了GC事件。 重复此过程,确保您浏览应用程序的不同区域,并查看其对GC事件的影响。 如果您发现任何奇怪的GC行为,那么您将需要进一步调查,因为这可能表明您的应用程序使用内存的方式存在问题。

您可以使用两种工具来收集有关应用程序内存使用情况的更多信息。 首先,您可以使用Android设备监视器的“ 堆”选项卡查看每个进程正在使用多少堆内存,这将标记所有吞噬可用内存的进程。

要使用堆工具,请选择“ Android设备监视器”的“ DDMS”选项卡,然后选择要检查的过程,然后单击“ 更新堆”按钮。 直到发生GC事件后,“ 堆”选项卡才会显示任何数据,但是如果您不耐烦,可以随时单击“ Cause GC”按钮来触发GC事件。

通过选择DDMS堆打开堆工具

另一个可以帮助您收集有关应用程序内存使用情况的信息的工具是“分配跟踪器”,它可以让您确切地查看应用程序要分配给内存的对象。 要使用分配跟踪器,请选择Android设备监视器的DDMS选项卡,然后选择分配跟踪器和要检查的过程。

单击开始跟踪按钮,并花一些时间与您的应用程序进行交互,尤其是您怀疑可能导致应用程序的内存管理问题的任何部分。 要查看采样期间采样分配器收集的所有数据,请选择“ 开始跟踪”按钮,然后选择“ 获取分配”按钮。

6.使用分析工具

了解您的受众是创建成功应用程序的关键部分。

可以访问有关谁是受众群体以及他们如何使用您的应用程序的数据,这意味着您可以就如何建立应用程序的成功做出更明智的决定,并可以改善应用程序表现不佳的领域。

收集此类用户数据对于使您能够确定受众不同部分的趋势特别有用。 例如,您可能认为某个细分受众群特别有价值-可能是他们在应用程序内购买中占了最大比例,或者他们在应用程序中花费的时间超过了平均水平。 掌握了这些信息后,您可以采取额外的步骤来支持这些用户,确保最有价值的用户与您的应用保持互动。

在规模的另一端,您可能会发现一个应用程序挣扎的领域。 例如,也许正在运行特定版本Android的用户的参与率大大降低,或者更有可能卸载您的应用。 在这种情况下,您可能想在此特定版本的Android上测试您的应用,以查看是否存在可能破坏用户群这一部分用户体验的错误或任何其他错误。

基本上,您可以收集的有关受众及其行为的数据越多,使现有用户保持满意,吸引新用户的机会就越大,并且通常为与您的应用程序接触的每个人都提供全方位的出色体验。

在本部分中,我将研究两个可以让您唾手可得的信息的服务:Firebase Analytics和Google Play开发者控制台。

火力基地

您可以使用Firebase Analytics收集有关用户的数据,例如他们的年龄,性别和位置,以及有关500多个应用内事件的信息。 如果需要,您甚至可以定义自己的自定义事件。

要将Firebase Analytics添加到您的项目中,您需要Google Play服务10.0.1或更高版本以及Google Repository版本26或更高版本,因此请打开SDK Manager并确保这些组件是最新的。 您还需要运行Android Studio 1.5或更高版本,并注册一个免费的Firebase帐户。

如果您运行的是Android 2.2或更高版本,则可以使用Firebase助手将您的应用程序连接到Firebase Analytics。 打开Android Studio,启动有问题的项目,然后:

  • 从Android Studio工具栏中选择工具> Firebase

通过从Android Studio工具栏中选择“工具”,然后选择Firebase,启动Firebase Assistant。

  • 单击以展开“ 分析”部分,然后选择“ 记录分析事件”链接。

  • 单击“ 连接到Firebase”按钮。

  • 在出现的对话框中,选择创建一个新的Firebase项目。

  • 单击“ 连接到Firebase”按钮。

  • 片刻之后,您应该会看到一条“ 已连接”消息。

  • 单击添加分析到您的应用程序按钮。

  • 在随后的对话框中,点击接受更改

就是这样! 现在,您可以登录到Firebase控制台,选择要检查的项目,然后选择Analytics(分析) ,以查看所有Firebase Analytics数据。 该数据将全天定期更新。

开发者控制台

您还可以通过开发者控制台深入了解应用的性能和用户行为。

要查看此数据,请登录到您的开发者控制台帐户,选择要检查的应用程序,然后从左侧菜单中选择仪表板

开发者控制台包含许多有用的信息,因此值得花时间详细研究其各个部分。 但是,可能需要特别注意以下几个方面:

  • 用户获取性能。 本部分详细介绍了用户如何找到您应用的Google Play列表,例如,通过带有UTM标签的链接登陆到您网页上的用户所占的百分比,一个AdWords广告,或通过浏览找到您的应用的人数Google Play商店。

  • 金融。 如果您已经实施了获利策略,例如应用内产品或订阅选项,则可以使用开发者控制台来查看应用的财务状况。 财务部分包含信息,例如,基于以下因素,每个付费用户在您的应用程序中投资的平均金额,通过您的应用程序提供的每种产品所产生的收入以及用户群的每个部分所花费的收入。以及他们的地理位置,年龄和所使用的Android版本。

  • 崩溃和ANR。 本部分包含用户提交的有关应用程序崩溃和应用程序不响应(ANR)错误的所有数据,使您有机会在用户开始对Google Play给予负面评价之前,识别并修复应用程序中可能发生的任何问题。 请注意,您的用户未报告的崩溃将不会显示在开发者控制台中。

您可能还需要考虑下载Google Play开发者控制台应用,该应用可让您随时随地查看所有这些信息。

结论

在本文中,我们研究了在开发Android应用程序时应该做和不应该做的六件事。 设计出色的用户体验的黄金法则是什么? 在下面发表评论,让我们知道。

翻译自: https://code.tutsplus.com/articles/android-dev-6-dos-and-donts-of-designing-a-great-user-experience--cms-28124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值