Adding custom layout to PreferenceFragment

后端 未结 2 679
有刺的猬
有刺的猬 2021-01-05 05:47

I have a preference fragment with a preference screen hierarchy. I would like to add a custom layout to define an \"about the author\" section, adding imageview to an elemen

相关标签:
2条回答
  • 2021-01-05 05:51

    This is just a follow up to the answer by Carmen (30 October 2016):

    If you want to dynamically change the properties on your custom layout, after the screen has loaded, you cannot use something like this:

    PreferenceScreen customPref = (PreferenceScreen) findPreference("customPreference");
    View prefRow = customPref.getView(null, null);
    ImageView imageView = (ImageView)prefRow.findViewById(R.id.image_view);
    imageView.setImageResource(R.drawable.whatever);
    

    Although it won't crash, it will not actually do anything. It's odd and confusing.

    You have to use a custom class that extends android.preference.Preference and override onBindView() to change properties on the custom layout. The technique is explained here: How to manage custom preference layout [Note: For PreferenceFragmentCompat, you have to extend androidx.preference.Preference and override onBindViewHolder()]

    Another way is to use getView() but ensure that you use View view = super.getView(convertView, parent);: Android Set Custom Preference Layout

    0 讨论(0)
  • 2021-01-05 05:58

    In your preference xml file (res/xml/prefs.xml), add a Preference with a custom layout:

    <Preference
        android:layout="@layout/custom_preference"/>
    

    Example of layout/custom_preference.xml with an ImageView and a TextView with a link that will be opened in the browser:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_book" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="http://www.mylink.com"
            android:autoLink="all"/>
    </LinearLayout>
    

    It's the last preference in the screenshot:

    0 讨论(0)
提交回复
热议问题