Files
yusheng-android/moduleUtil/src/main/java/com/xscm/moduleutil/utils/PermissionDescriptionHelper.java
梁小江 f4f04b59a8 1:添加权限说明
2:聊天添加举报按钮
2025-10-30 18:19:16 +08:00

130 lines
5.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.xscm.moduleutil.utils;
import android.Manifest;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import com.luck.picture.lib.interfaces.OnPermissionDescriptionListener;
import com.luck.picture.lib.permissions.PermissionConfig;
import com.luck.picture.lib.utils.DensityUtil;
import com.luck.picture.lib.widget.MediumBoldTextView;
/**
* com.xscm.moduleutil.utils
* qx
* 2025/10/30
*/
// PermissionDescriptionHelper.java
public class PermissionDescriptionHelper {
private static final String TAG_EXPLAIN_VIEW = "TAG_EXPLAIN_VIEW";
public static class PermissionDescriptionListener implements OnPermissionDescriptionListener {
@Override
public void onPermissionDescription(Fragment fragment, String[] permissionArray) {
View rootView = fragment.requireView();
if (rootView instanceof ViewGroup) {
addPermissionDescription(false, (ViewGroup) rootView, permissionArray);
}
}
@Override
public void onDismiss(Fragment fragment) {
removePermissionDescription((ViewGroup) fragment.requireView());
}
}
public static OnPermissionDescriptionListener createListener() {
return new PermissionDescriptionListener();
}
public static void addPermissionDescription(boolean isHasSimpleXCamera, ViewGroup viewGroup, String[] permissionArray) {
int dp10 = DensityUtil.dip2px(viewGroup.getContext(), 10);
int dp15 = DensityUtil.dip2px(viewGroup.getContext(), 15);
MediumBoldTextView view = new MediumBoldTextView(viewGroup.getContext());
view.setTag(TAG_EXPLAIN_VIEW);
view.setTextSize(14);
view.setTextColor(Color.parseColor("#333333"));
view.setPadding(dp10, dp15, dp10, dp15);
view.setBackgroundColor(Color.WHITE); // 添加背景色确保可见
String title;
String explain;
if (TextUtils.equals(permissionArray[0], PermissionConfig.CAMERA[0])) {
title = "相机权限使用说明";
explain = "相机权限使用说明\n用户app用于拍照/录视频";
} else if (TextUtils.equals(permissionArray[0], Manifest.permission.RECORD_AUDIO)) {
if (isHasSimpleXCamera) {
title = "麦克风权限使用说明";
explain = "麦克风权限使用说明\n用户app用于录视频时采集声音";
} else {
title = "录音权限使用说明";
explain = "录音权限使用说明\n用户app用于采集声音";
}
}else if (TextUtils.equals(permissionArray[0], Manifest.permission.ACCESS_FINE_LOCATION)){
title = "定位权限";
explain = "定位权限使用说明\n用户app获取当前位置方便更好的推荐附近玩乐";
}
else {
title = "存储权限使用说明";
explain = "存储权限使用说明\n用户app写入/下载/保存/读取/修改/删除图片、视频、文件等信息";
}
int startIndex = 0;
int endOf = startIndex + title.length();
SpannableStringBuilder builder = new SpannableStringBuilder(explain);
builder.setSpan(new AbsoluteSizeSpan(DensityUtil.dip2px(viewGroup.getContext(), 16)), startIndex, endOf, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(new ForegroundColorSpan(0xFF333333), startIndex, endOf, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
view.setText(builder);
view.setBackground(ContextCompat.getDrawable(viewGroup.getContext(), com.xscm.moduleutil.R.drawable.ps_demo_permission_desc_bg));
// 确保视图可见
view.setVisibility(View.VISIBLE);
view.setZ(9999); // 提高Z轴确保在最上层
if (isHasSimpleXCamera) {
RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.topMargin = DensityUtil.getStatusBarHeight(viewGroup.getContext());
layoutParams.leftMargin = dp10;
layoutParams.rightMargin = dp10;
viewGroup.addView(view, layoutParams);
} else {
ConstraintLayout.LayoutParams layoutParams =
new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
// 修改约束设置,确保视图位置正确
layoutParams.topToTop = ConstraintSet.PARENT_ID;
layoutParams.leftToLeft = ConstraintSet.PARENT_ID;
layoutParams.rightToRight = ConstraintSet.PARENT_ID;
layoutParams.leftMargin = dp10;
layoutParams.rightMargin = dp10;
layoutParams.topMargin = DensityUtil.dip2px(viewGroup.getContext(), 50);
viewGroup.addView(view, layoutParams);
}
// 强制刷新布局
viewGroup.requestLayout();
viewGroup.postInvalidate();
}
public static void removePermissionDescription(ViewGroup viewGroup) {
if (viewGroup != null) {
View tagExplainView = viewGroup.findViewWithTag(TAG_EXPLAIN_VIEW);
if (tagExplainView != null) {
viewGroup.removeView(tagExplainView);
}
}
}
}