自定义类似微信效果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. 效果如图:
相关推荐
三少爷的鞋7 小时前
Android 架构七条铁律:架构师真正设计的不是代码,而是秩序
android
xiangxiongfly9158 小时前
Android GsonFactory总结
android·gson·gsonfactory
WythePlus10 小时前
Android 14 SELinux策略深度解析
android·安全策略·selinux策略
俩个逗号。。14 小时前
Kotlin flow 详解
android·开发语言·kotlin
橙光成长16 小时前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
深圳雨林凯AI16 小时前
图案裂变的底色衰减:alpha通道、亮度对比与白墨分色的量化拆解
android
mmsx16 小时前
Android 模块化收口:能力组合框架、手写 LifecycleOwner 与热修复共存
android
恋猫de小郭18 小时前
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
android·前端·flutter
2501_9160088919 小时前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview
好的佩奇1 天前
蓝牙之通信架构
android·flutter·蓝牙