如何处理首选项(PreferenceFragment)中自定义项上的单击事件



我为首选项创建了自定义布局,以便向其中添加新的自定义项。我添加了具有android:layout属性的布局。我的自定义布局是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/selectableItemBackground"
android:clipToPadding="false"
android:baselineAligned="false">
<include layout="@layout/image_frame"/>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:ellipsize="marquee"/>
<TextView
android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:layout_gravity="start"
android:textAlignment="viewStart"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="10"
style="@style/PreferenceSummaryTextStyle"/>
</RelativeLayout>
<ImageView
android:id="@+id/`preference_info`"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_info"
android:layout_marginStart="16dp"
tools:ignore="ContentDescription" />
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="end|center_vertical"
android:paddingStart="16dp"
android:paddingEnd="0dp"
android:orientation="vertical"/>
</LinearLayout>

我的新项目有preference_infoid。如何处理onPreferenceTreeClick上的点击事件来处理整个首选行上的简单点击事件?

这不是从Preferences获取自定义布局视图的直接方法,您必须创建一个自定义Preference,从androidx.Preference扩展Preference,并覆盖onBindView(view:view(方法,只有在那里您才能获得Preference布局中的视图。

class CustomInfoPreference(context:Context) : Preference(context){
constructor(context: Context, attrs: AttributeSet): super(context,attrs)
override protected fun onBindView(view:View){ 
super(view)
val preferenceInfo = view.findViewById<ImageView>(R.id.preference_info) 

preferenceInfo.setOnClickListener{
// Perform action!
}
}
}

然后在preference.xml中,您可以使用这样的自定义首选项:

<PreferenceCategory
android:title="...." >
<com.example.appname.CustomInfoPreference
android:key="pref key"
android:title="your pref title"
android:summary="your pref summary"
android:defaultValue=""
android:layout="@layout/custom_preference_layout" />
</PreferenceCategory>

也检查这个SO线程:安卓设置自定义首选项布局

最新更新