Java 如何处理首选项(PreferenceFragment)中自定义项上的单击事件?
我为首选项创建了自定义布局,以便向其中添加新的自定义项。 我用android:layout属性添加该布局。我的自定义布局如下所示:Java 如何处理首选项(PreferenceFragment)中自定义项上的单击事件?,java,android,kotlin,android-preferences,preferenceactivity,Java,Android,Kotlin,Android Preferences,Preferenceactivity,我为首选项创建了自定义布局,以便向其中添加新的自定义项。 我用android:layout属性添加该布局。我的自定义布局如下所示: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://
<?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>
我的新项目具有
首选项\u信息
id。如何处理首选项树上的单击事件单击整个首选项行上的简单单击事件?这不是从首选项获取自定义布局视图的直接方法,您必须创建一个自定义首选项,该首选项从androidx.Preference扩展到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!
}
}
}
class CustomInfoPreference(上下文:上下文):首选项(上下文){
构造函数(context:context,attrs:AttributeSet):super(context,attrs)
重写受保护的onBindView(视图:视图){
超级(视图)
val preferenceInfo=view.findViewById(R.id.preference\u info)
preferenceInfo.setOnClickListener{
//行动起来!
}
}
}
然后在您的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线程: