自定义类似微信效果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. 效果如图:
相关推荐
2501_9159214321 分钟前
iOS 应用代上架流程,多工具组合与使用 开心上架 跨平台自动化上传指南
android·ios·小程序·uni-app·自动化·cocoa·iphone
日日行不惧千万里26 分钟前
2025最新仿默往 IM 即时通讯系统源码(PC + Web + iOS + Android)完整版发布!
android·ios
歪歪10027 分钟前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
雪芽蓝域zzs32 分钟前
uniapp 修改android包名
android·uni-app
个微二次开发协议1 小时前
python微信机器人制作教程|文档
微信
咪莫咪莫1 小时前
个微协议/微信二次开发/ipad协议/WTAPI框架
微信
用户2018792831671 小时前
厨房里的协程大冒险:launch与async的烹饪之旅
android
用户2018792831671 小时前
浅析协程与挂起函数实现原理
android
木易士心2 小时前
Android Handler 机制原理详解
android·app
用户2018792831672 小时前
CoroutineDispatcher的"自由精灵" - Dispatchers.Unconfined
android