1:添加权限说明

2:聊天添加举报按钮
This commit is contained in:
2025-10-30 18:19:16 +08:00
parent a993a7710f
commit f4f04b59a8

View File

@@ -0,0 +1,129 @@
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);
}
}
}
}