自定义类似微信效果Preference

  1. 为自定义Preference 添加背景:custom_preference_background.xml
XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <gradient android:startColor="@color/white" android:endColor="@color/white" android:angle="90"/>
            <corners android:radius="8dp"/>
        </shape>
    </item>
</selector>
  1. 自定义layout: layout_custom_click_preference.xml
java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingVertical="20dp"
    android:layout_marginHorizontal="20dp"
    android:layout_marginVertical="8dp"
    android:background="@drawable/custom_preference_background">

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/custom_preference_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textColor="#111111"
        android:text="@string/text_help_page"
        android:layout_marginStart="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/custom_preference_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_preference_back"
        android:layout_marginEnd="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
  1. 自定义style:
XML 复制代码
    <declare-styleable name="customClickPreferenceView">
        <attr name="iconDrawable" format="reference|color" />
    </declare-styleable>

4.自定义图标

XML 复制代码
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="16dp"
    android:height="16dp"
    android:viewportWidth="16"
    android:viewportHeight="16">
  <path
      android:pathData="M5.869,12.862L5.869,12.862A0.667,0.667 45.145,0 1,5.869 11.919L10.319,7.47A0.667,0.667 45.145,0 1,11.262 7.47L11.262,7.47A0.667,0.667 45.145,0 1,11.262 8.413L6.812,12.862A0.667,0.667 45.145,0 1,5.869 12.862z"
      android:fillColor="#000"/>
  <path
      android:pathData="M5.682,2.729L5.682,2.729A0.667,0.667 45.145,0 1,6.625 2.729L11.075,7.178A0.667,0.667 45.145,0 1,11.075 8.121L11.075,8.121A0.667,0.667 45.145,0 1,10.132 8.121L5.682,3.672A0.667,0.667 45.145,0 1,5.682 2.729z"
      android:fillColor="#000000"/>
</vector>
  1. 完整代码
XML 复制代码
public class CustomClickPreference extends Preference {
    private AppCompatTextView textView;
    private AppCompatImageView imageView;
    private int iconDrawable;

    public CustomClickPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        setLayoutResource(R.layout.layout_custom_click_preference);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.customClickPreferenceView);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            iconDrawable = typedArray.getResourceId(R.styleable.customClickPreferenceView_iconDrawable, R.drawable.ic_preference_back);
        }
        typedArray.recycle();


    }

    @Override
    public void onBindViewHolder(PreferenceViewHolder holder) {
        super.onBindViewHolder(holder);

        // 自定义布局
       textView = (AppCompatTextView) holder.findViewById(R.id.custom_preference_text);
       imageView = (AppCompatImageView) holder.findViewById(R.id.custom_preference_icon);
       textView.setText(getTitle());
       imageView.setImageResource(iconDrawable);
    }

    public void setIconDrawable(int resourceId) {
        imageView.setImageResource(resourceId);
    }
}
  1. 用法
XML 复制代码
    <com.tetras.sensechat.wedgit.CustomClickPreference
        app:iconDrawable="@drawable/ic_preference_back"
        app:isPreferenceVisible="false"
        app:key="key_document_help"
        app:title="帮助文档" />
  1. 效果如图:
相关推荐
plainGeekDev1 小时前
Android性能优化面试题:你说你会优化,结果连ANR都排查不了
android·面试
richard_yuu1 小时前
鸿蒙本地数据存储实战|Preferences 封装、数据隔离与隐私合规存储方案
android·华为·harmonyos
木易 士心1 小时前
深入理解 OKHttp:设计模式、核心机制与架构优势
android·设计模式·架构
Ehtan_Zheng2 小时前
Jetpack Compose `@ReadOnlyComposable` 的“魔法”
android
沐言人生2 小时前
ReactNative 源码分析11——Native View创建流程setChildren和manageChildren
android·react native
诸神黄昏EX2 小时前
Android Build系列专题【篇七:VINTF源码解析】
android
plainGeekDev2 小时前
Android Framework 面试题:Binder都说不清楚,简历别写精通了
android·java
萌新杰少2 小时前
安卓原生项目迁移KMP——核心迁移
android·kotlin·jetbrains
小孔龙2 小时前
AndroidManifest.xml 配置速查手册
android
七牛云行业应用2 小时前
OpenAI Codex手机版上线实战:iOS/Android 5步配置远程控制指南(2026)
android·ios·智能手机