自定义类似微信效果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. 效果如图:
相关推荐
AI周红伟12 小时前
OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟
大数据·运维·服务器·人工智能·微信·openclaw
huwuhang18 小时前
Winkawaks街机游戏模拟器整合ROM版 1.65 汉化修正完整版 2026.03.30
android·游戏·游戏机
yitian_hm18 小时前
MySQL主从复制与读写分离实战指南
android·mysql·adb
NEGl DRYN18 小时前
Plugin ‘mysql_native_password‘ is not loaded`
android·数据库·mysql
Derrick__119 小时前
Android混淆和加密技术
android·jvm·python
sunwenjian88619 小时前
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解
android·数据库·mysql
ictI CABL20 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
放学以后Nicetry21 小时前
Android SELinux 指南:从基本概念到实战修复
android
CCIE-Yasuo1 天前
《永恒战士2-无双战神》无限金币版(提供apk下载)安卓Android逆向记录学习-Deepseek-AI辅助
android·java·学习·游戏
jzlhll1231 天前
kotlin flow去重distinctUntilChanged vs distinctUntilChangedBy
android·开发语言·kotlin