From b05d1b1fe10e98df4a4949593e00d202cee8426b Mon Sep 17 00:00:00 2001 From: "linfeng.wang" Date: Sun, 23 Feb 2020 20:57:13 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E8=A7=86=E9=A2=91=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=92=8C=E5=9B=BE=E7=89=87=E9=80=89=E6=8B=A9=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E5=85=B1=E7=94=A8=E4=B8=80=E4=B8=AA=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../luck/pictureselector/MainActivity.java | 11 +++---- .../luck/pictureselector/PhotoFragment.java | 8 ++--- .../picture/lib/PicturePreviewActivity.java | 24 +++++++-------- .../picture/lib/PictureSelectionModel.java | 22 ++++++++++++-- .../picture/lib/PictureSelectorActivity.java | 30 +++++++++---------- ...ureSelectorPreviewWeChatStyleActivity.java | 6 ++-- .../PictureSelectorWeChatStyleActivity.java | 6 ++-- .../lib/adapter/PictureImageGridAdapter.java | 18 +++++++---- .../lib/config/PictureSelectionConfig.java | 8 +++++ .../src/main/res/values/strings.xml | 1 + 10 files changed, 84 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/com/luck/pictureselector/MainActivity.java b/app/src/main/java/com/luck/pictureselector/MainActivity.java index 8763d2869..f38f0dc46 100644 --- a/app/src/main/java/com/luck/pictureselector/MainActivity.java +++ b/app/src/main/java/com/luck/pictureselector/MainActivity.java @@ -426,9 +426,10 @@ public void onAddPicClick() { .setPictureCropStyle(mCropParameterStyle)// 动态自定义裁剪主题 .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画 .isWithVideoImage(true)// 图片和视频是否可以同选,只在ofAll模式下有效 - .maxSelectNum(maxSelectNum)// 最大图片选择数量 - .minSelectNum(1)// 最小选择数量 - .maxVideoSelectNum(1) // 视频最大选择数量,如果没有单独设置的需求则可以不设置,同用maxSelectNum字段 + .maxSelectNum(maxSelectNum)// 最大选择数量 + .maxPictureSelectNum(maxSelectNum)// 最大图片选择数量 + .minPictureSelectNum(1)// 最小图片选择数量 + .maxVideoSelectNum(maxSelectNum) // 视频最大选择数量,如果没有单独设置的需求则可以不设置 //.minVideoSelectNum(1)// 视频最小选择数量,如果没有单独设置的需求则可以不设置,同用minSelectNum字段 .imageSpanCount(4)// 每行显示个数 .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回 @@ -518,9 +519,9 @@ public void onCancel() { .setPictureStyle(mPictureParameterStyle)// 动态自定义相册主题 .setPictureCropStyle(mCropParameterStyle)// 动态自定义裁剪主题 .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画 - .maxSelectNum(maxSelectNum)// 最大图片选择数量 + .maxPictureSelectNum(maxSelectNum)// 最大图片选择数量 .isUseCustomCamera(cb_custom_camera.isChecked())// 是否使用自定义相机 - .minSelectNum(1)// 最小选择数量 + .minPictureSelectNum(1)// 最小选择数量 //.querySpecifiedFormatSuffix(PictureMimeType.ofPNG())// 查询指定后缀格式资源 .selectionMode(cb_choose_mode.isChecked() ? PictureConfig.MULTIPLE : PictureConfig.SINGLE)// 多选 or 单选 diff --git a/app/src/main/java/com/luck/pictureselector/PhotoFragment.java b/app/src/main/java/com/luck/pictureselector/PhotoFragment.java index f5707ed5b..94565bd50 100644 --- a/app/src/main/java/com/luck/pictureselector/PhotoFragment.java +++ b/app/src/main/java/com/luck/pictureselector/PhotoFragment.java @@ -416,8 +416,8 @@ public void onAddPicClick() { .setPictureCropStyle(mCropParameterStyle)// 动态自定义裁剪主题 .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画 .isWithVideoImage(true)// 图片和视频是否可以同选 - .maxSelectNum(maxSelectNum)// 最大图片选择数量 - //.minSelectNum(1)// 最小选择数量 + .maxPictureSelectNum(maxSelectNum)// 最大图片选择数量 + //.minPictureSelectNum(1)// 最小选择数量 //.minVideoSelectNum(1)// 视频最小选择数量,如果没有单独设置的需求则可以不设置,同用minSelectNum字段 .maxVideoSelectNum(1) // 视频最大选择数量,如果没有单独设置的需求则可以不设置,同用maxSelectNum字段 .imageSpanCount(4)// 每行显示个数 @@ -515,8 +515,8 @@ public void onCancel() { .setPictureStyle(mPictureParameterStyle)// 动态自定义相册主题 .setPictureCropStyle(mCropParameterStyle)// 动态自定义裁剪主题 .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画 - .maxSelectNum(maxSelectNum)// 最大图片选择数量 - .minSelectNum(1)// 最小选择数量 + .maxPictureSelectNum(maxSelectNum)// 最大图片选择数量 + .minPictureSelectNum(1)// 最小选择数量 .isUseCustomCamera(cb_custom_camera.isChecked())// 是否使用自定义相机 //.querySpecifiedFormatSuffix(PictureMimeType.ofPNG())// 查询指定后缀格式资源 .selectionMode(cb_choose_mode.isChecked() ? diff --git a/picture_library/src/main/java/com/luck/picture/lib/PicturePreviewActivity.java b/picture_library/src/main/java/com/luck/picture/lib/PicturePreviewActivity.java index 495c30ee9..d0337e99f 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/PicturePreviewActivity.java +++ b/picture_library/src/main/java/com/luck/picture/lib/PicturePreviewActivity.java @@ -197,14 +197,14 @@ protected void initCompleteText(int startCount) { // 未选择任何图片 mTvPictureOk.setText(isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureUnCompleteText) ? config.style.pictureUnCompleteText : getString(R.string.picture_done_front_num, - startCount, config.maxVideoSelectNum + config.maxSelectNum)); + startCount, config.maxVideoSelectNum + config.maxPictureSelectNum)); } else { // 已选择 if (isCompleteReplaceNum && isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureCompleteText)) { - mTvPictureOk.setText(String.format(config.style.pictureCompleteText, startCount, config.maxVideoSelectNum + config.maxSelectNum)); + mTvPictureOk.setText(String.format(config.style.pictureCompleteText, startCount, config.maxVideoSelectNum + config.maxPictureSelectNum)); } else { mTvPictureOk.setText(getString(R.string.picture_done_front_num, - startCount, config.maxVideoSelectNum + config.maxSelectNum)); + startCount, config.maxVideoSelectNum + config.maxPictureSelectNum)); } } } @@ -496,8 +496,8 @@ protected void onCheckedComplete() { return; } } - if (PictureMimeType.eqImage(image.getMimeType()) && imageSize >= config.maxSelectNum && !check.isSelected()) { - ToastUtils.s(getContext(), StringUtils.getMsg(getContext(), image.getMimeType(), config.maxSelectNum)); + if (PictureMimeType.eqImage(image.getMimeType()) && imageSize >= config.maxPictureSelectNum && !check.isSelected()) { + ToastUtils.s(getContext(), StringUtils.getMsg(getContext(), image.getMimeType(), config.maxPictureSelectNum)); return; } } else { @@ -530,8 +530,8 @@ protected void onCheckedComplete() { return; } } else { - if (currentSize >= config.maxSelectNum && !check.isSelected()) { - ToastUtils.s(getContext(), StringUtils.getMsg(getContext(), mimeType, config.maxSelectNum)); + if (currentSize >= config.maxPictureSelectNum && !check.isSelected()) { + ToastUtils.s(getContext(), StringUtils.getMsg(getContext(), mimeType, config.maxPictureSelectNum)); return; } if (PictureMimeType.eqVideo(image.getMimeType())) { @@ -623,9 +623,9 @@ protected void onComplete() { } } if (config.selectionMode == PictureConfig.MULTIPLE) { - if (config.minSelectNum > 0) { - if (imageSize < config.minSelectNum) { - ToastUtils.s(getContext(), getString(R.string.picture_min_img_num, config.minSelectNum)); + if (config.minPictureSelectNum > 0) { + if (imageSize < config.minPictureSelectNum) { + ToastUtils.s(getContext(), getString(R.string.picture_min_img_num, config.minPictureSelectNum)); return; } } @@ -639,8 +639,8 @@ protected void onComplete() { } else { // 单选模式(同类型) if (config.selectionMode == PictureConfig.MULTIPLE) { - if (PictureMimeType.eqImage(mimeType) && config.minSelectNum > 0 && size < config.minSelectNum) { - String str = getString(R.string.picture_min_img_num, config.minSelectNum); + if (PictureMimeType.eqImage(mimeType) && config.minPictureSelectNum > 0 && size < config.minPictureSelectNum) { + String str = getString(R.string.picture_min_img_num, config.minPictureSelectNum); ToastUtils.s(getContext(), str); return; } diff --git a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectionModel.java b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectionModel.java index 337278739..715ccb711 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectionModel.java +++ b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectionModel.java @@ -289,7 +289,7 @@ public PictureSelectionModel isWithVideoImage(boolean isWithVideoImage) { } /** - * @param maxSelectNum PictureSelector max selection + * @param maxSelectNum Selector max selection * @return */ public PictureSelectionModel maxSelectNum(int maxSelectNum) { @@ -298,7 +298,7 @@ public PictureSelectionModel maxSelectNum(int maxSelectNum) { } /** - * @param minSelectNum PictureSelector min selection + * @param minSelectNum Selector min selection * @return */ public PictureSelectionModel minSelectNum(int minSelectNum) { @@ -306,6 +306,24 @@ public PictureSelectionModel minSelectNum(int minSelectNum) { return this; } + /** + * @param maxSelectNum PictureSelector max selection + * @return + */ + public PictureSelectionModel maxPictureSelectNum(int maxSelectNum) { + selectionConfig.maxPictureSelectNum = maxSelectNum; + return this; + } + + /** + * @param minSelectNum PictureSelector min selection + * @return + */ + public PictureSelectionModel minPictureSelectNum(int minSelectNum) { + selectionConfig.minPictureSelectNum = minSelectNum; + return this; + } + /** * @param maxVideoSelectNum PictureSelector video max selection * @return diff --git a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorActivity.java b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorActivity.java index 34ed1e76c..164923a76 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorActivity.java +++ b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorActivity.java @@ -362,14 +362,14 @@ protected void initCompleteText(int startCount) { // 未选择任何图片 mTvPictureOk.setText(isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureUnCompleteText) ? config.style.pictureUnCompleteText : getString(R.string.picture_done_front_num, - startCount, config.maxVideoSelectNum + config.maxSelectNum)); + startCount, config.maxVideoSelectNum + config.maxPictureSelectNum)); } else { // 已选择 if (isCompleteReplaceNum && isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureCompleteText)) { - mTvPictureOk.setText(String.format(config.style.pictureCompleteText, startCount, config.maxVideoSelectNum + config.maxSelectNum)); + mTvPictureOk.setText(String.format(config.style.pictureCompleteText, startCount, config.maxVideoSelectNum + config.maxPictureSelectNum)); } else { mTvPictureOk.setText(getString(R.string.picture_done_front_num, - startCount, config.maxVideoSelectNum + config.maxSelectNum)); + startCount, config.maxVideoSelectNum + config.maxPictureSelectNum)); } } } @@ -580,9 +580,9 @@ private void onComplete() { } } if (config.selectionMode == PictureConfig.MULTIPLE) { - if (config.minSelectNum > 0) { - if (imageSize < config.minSelectNum) { - ToastUtils.s(getContext(), getString(R.string.picture_min_img_num, config.minSelectNum)); + if (config.minPictureSelectNum > 0) { + if (imageSize < config.minPictureSelectNum) { + ToastUtils.s(getContext(), getString(R.string.picture_min_img_num, config.minPictureSelectNum)); return; } } @@ -595,8 +595,8 @@ private void onComplete() { } } else { if (config.selectionMode == PictureConfig.MULTIPLE) { - if (PictureMimeType.eqImage(mimeType) && config.minSelectNum > 0 && size < config.minSelectNum) { - String str = getString(R.string.picture_min_img_num, config.minSelectNum); + if (PictureMimeType.eqImage(mimeType) && config.minPictureSelectNum > 0 && size < config.minPictureSelectNum) { + String str = getString(R.string.picture_min_img_num, config.minPictureSelectNum); ToastUtils.s(getContext(), str); return; } @@ -611,8 +611,8 @@ private void onComplete() { // 如果没选并且设置了可以空返回则直接回到结果页 if (config.returnEmpty && size == 0) { if (config.selectionMode == PictureConfig.MULTIPLE) { - if (config.minSelectNum > 0 && size < config.minSelectNum) { - String str = getString(R.string.picture_min_img_num, config.minSelectNum); + if (config.minPictureSelectNum > 0 && size < config.minPictureSelectNum) { + String str = getString(R.string.picture_min_img_num, config.minPictureSelectNum); ToastUtils.s(getContext(), str); return; } @@ -1375,12 +1375,12 @@ private void requestCamera(Intent data) { } } else { // 图片还可选 - if (imageSize < config.maxSelectNum) { + if (imageSize < config.maxPictureSelectNum) { selectedImages.add(media); mAdapter.bindSelectImages(selectedImages); } else { ToastUtils.s(getContext(), StringUtils.getMsg(getContext(), media.getMimeType(), - config.maxSelectNum)); + config.maxPictureSelectNum)); } } @@ -1400,17 +1400,17 @@ private void requestCamera(Intent data) { } } else { // 没有到最大选择量 才做默认选中刚拍好的 - if (count < config.maxSelectNum) { + if (count < config.maxPictureSelectNum) { // 类型相同或还没有选中才加进选中集合中 if (mimeTypeSame || count == 0) { - if (count < config.maxSelectNum) { + if (count < config.maxPictureSelectNum) { selectedImages.add(media); mAdapter.bindSelectImages(selectedImages); } } } else { ToastUtils.s(getContext(), StringUtils.getMsg(getContext(), mimeType, - config.maxSelectNum)); + config.maxPictureSelectNum)); } } } diff --git a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorPreviewWeChatStyleActivity.java b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorPreviewWeChatStyleActivity.java index 2fec6a6a8..787c2c206 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorPreviewWeChatStyleActivity.java +++ b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorPreviewWeChatStyleActivity.java @@ -276,16 +276,16 @@ protected void initCompleteText(int startCount) { boolean isCompleteReplaceNum = isNotEmptyStyle && config.style.isCompleteReplaceNum; if (isCompleteReplaceNum && isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureCompleteText)) { mPictureSendView.setText(String.format(config.style.pictureCompleteText, - selectImages.size(), config.maxVideoSelectNum + config.maxSelectNum)); + selectImages.size(), config.maxVideoSelectNum + config.maxPictureSelectNum)); } else { mPictureSendView.setText(isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureUnCompleteText) ? config.style.pictureUnCompleteText : getString(R.string.picture_send_num, selectImages.size(), - config.maxVideoSelectNum + config.maxSelectNum)); + config.maxVideoSelectNum + config.maxPictureSelectNum)); } } } else { String mimeType = selectImages.get(0).getMimeType(); - int maxSize = PictureMimeType.eqVideo(mimeType) ? config.maxVideoSelectNum : config.maxSelectNum; + int maxSize = PictureMimeType.eqVideo(mimeType) ? config.maxVideoSelectNum : config.maxPictureSelectNum; if (config.selectionMode == PictureConfig.SINGLE) { if (startCount <= 0) { mPictureSendView.setText(isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureUnCompleteText) diff --git a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorWeChatStyleActivity.java b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorWeChatStyleActivity.java index 4b895299a..aa77987db 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorWeChatStyleActivity.java +++ b/picture_library/src/main/java/com/luck/picture/lib/PictureSelectorWeChatStyleActivity.java @@ -260,15 +260,15 @@ protected void initCompleteText(List list) { } else { boolean isCompleteReplaceNum = isNotEmptyStyle && config.style.isCompleteReplaceNum; if (isCompleteReplaceNum && isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureCompleteText)) { - mPictureSendView.setText(String.format(config.style.pictureCompleteText, size, config.maxVideoSelectNum + config.maxSelectNum)); + mPictureSendView.setText(String.format(config.style.pictureCompleteText, size, config.maxVideoSelectNum + config.maxPictureSelectNum)); } else { mPictureSendView.setText(isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureUnCompleteText) - ? config.style.pictureUnCompleteText : getString(R.string.picture_send_num, size, config.maxVideoSelectNum + config.maxSelectNum)); + ? config.style.pictureUnCompleteText : getString(R.string.picture_send_num, size, config.maxVideoSelectNum + config.maxPictureSelectNum)); } } } else { String mimeType = list.get(0).getMimeType(); - int maxSize = PictureMimeType.eqVideo(mimeType) ? config.maxVideoSelectNum : config.maxSelectNum; + int maxSize = PictureMimeType.eqVideo(mimeType) ? config.maxVideoSelectNum : config.maxPictureSelectNum; if (config.selectionMode == PictureConfig.SINGLE) { if (size <= 0) { mPictureSendView.setText(isNotEmptyStyle && !TextUtils.isEmpty(config.style.pictureUnCompleteText) diff --git a/picture_library/src/main/java/com/luck/picture/lib/adapter/PictureImageGridAdapter.java b/picture_library/src/main/java/com/luck/picture/lib/adapter/PictureImageGridAdapter.java index e00e48838..105e5e953 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/adapter/PictureImageGridAdapter.java +++ b/picture_library/src/main/java/com/luck/picture/lib/adapter/PictureImageGridAdapter.java @@ -12,6 +12,7 @@ import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; @@ -33,6 +34,7 @@ import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Locale; /** @@ -329,9 +331,11 @@ private void changeCheckboxState(ViewHolder contentHolder, LocalMedia image) { } if (PictureMimeType.eqVideo(image.getMimeType())) { if (config.maxVideoSelectNum > 0 - && videoSize >= config.maxVideoSelectNum && !isChecked) { + && size >= config.maxSelectNum && !isChecked) { // 如果选择的是视频 - ToastUtils.s(context, StringUtils.getMsg(context, image.getMimeType(), config.maxVideoSelectNum)); + Toast.makeText(context, String.format(Locale.getDefault(), context.getString( + R.string.picture_message_video_or_image_max_num), config.maxSelectNum), + Toast.LENGTH_SHORT).show(); return; } @@ -349,8 +353,10 @@ private void changeCheckboxState(ViewHolder contentHolder, LocalMedia image) { return; } } - if (PictureMimeType.eqImage(image.getMimeType()) && imageSize >= config.maxSelectNum && !isChecked) { - ToastUtils.s(context, StringUtils.getMsg(context, image.getMimeType(), config.maxSelectNum)); + if (PictureMimeType.eqImage(image.getMimeType()) && size >= config.maxSelectNum && !isChecked) { + Toast.makeText(context, String.format(Locale.getDefault(), context.getString( + R.string.picture_message_video_or_image_max_num), config.maxSelectNum), + Toast.LENGTH_SHORT).show(); return; } @@ -385,8 +391,8 @@ private void changeCheckboxState(ViewHolder contentHolder, LocalMedia image) { return; } } else { - if (size >= config.maxSelectNum && !isChecked) { - ToastUtils.s(context, StringUtils.getMsg(context, mimeType, config.maxSelectNum)); + if (size >= config.maxPictureSelectNum && !isChecked) { + ToastUtils.s(context, StringUtils.getMsg(context, mimeType, config.maxPictureSelectNum)); return; } if (PictureMimeType.eqVideo(image.getMimeType())) { diff --git a/picture_library/src/main/java/com/luck/picture/lib/config/PictureSelectionConfig.java b/picture_library/src/main/java/com/luck/picture/lib/config/PictureSelectionConfig.java index 0606c81d5..dede2bd4d 100644 --- a/picture_library/src/main/java/com/luck/picture/lib/config/PictureSelectionConfig.java +++ b/picture_library/src/main/java/com/luck/picture/lib/config/PictureSelectionConfig.java @@ -48,6 +48,8 @@ public final class PictureSelectionConfig implements Parcelable { public int selectionMode; public int maxSelectNum; public int minSelectNum; + public int maxPictureSelectNum; + public int minPictureSelectNum; public int maxVideoSelectNum; public int minVideoSelectNum; public int videoQuality; @@ -150,6 +152,8 @@ protected void initDefaultValue() { selectionMode = PictureConfig.MULTIPLE; maxSelectNum = 9; minSelectNum = 0; + maxPictureSelectNum = 9; + minPictureSelectNum = 0; maxVideoSelectNum = 1; minVideoSelectNum = 0; videoQuality = 1; @@ -285,6 +289,8 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.selectionMode); dest.writeInt(this.maxSelectNum); dest.writeInt(this.minSelectNum); + dest.writeInt(this.maxPictureSelectNum); + dest.writeInt(this.minPictureSelectNum); dest.writeInt(this.maxVideoSelectNum); dest.writeInt(this.minVideoSelectNum); dest.writeInt(this.videoQuality); @@ -379,6 +385,8 @@ protected PictureSelectionConfig(Parcel in) { this.selectionMode = in.readInt(); this.maxSelectNum = in.readInt(); this.minSelectNum = in.readInt(); + this.maxPictureSelectNum = in.readInt(); + this.minPictureSelectNum = in.readInt(); this.maxVideoSelectNum = in.readInt(); this.minVideoSelectNum = in.readInt(); this.videoQuality = in.readInt(); diff --git a/picture_library/src/main/res/values/strings.xml b/picture_library/src/main/res/values/strings.xml index a5bad661a..2454d6dac 100644 --- a/picture_library/src/main/res/values/strings.xml +++ b/picture_library/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ 视频最低选择不能少于%1$s个 你最多可以选择%1$s个视频 你最多可以选择%1$s个音频 + 你最多可以选择%1$s个视频/图片 预览 请稍候... %1$d/%2$d 完成