在系统的preference中,默认布局中包含了一个ImageView、2个TextView和一个LinearLayout布局。在使用Preference的时候,可以通过使用为Preference指定布局来替换原有的系统布局,不过如果只是简单的改变显示布局,可以通过设置setLayoutResource(int layoutId) 函数实现。但是这样做无法对布局中的事件单独设置点击事件。如果需要设置点击事件的话,需要我们自定义Preference。
MainActivity.java
package com.example.custompreferencedemo; import android.preference.Preference; import android.preference.PreferenceActivity; import android.os.Bundle; public class MainActivity extends PreferenceActivity { private Preference _System_Preference; private PreferenceWithCustomId _Custom_Id_Preference; private PreferenceWithSystemId _System_Id_Preference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_xml); _InitPreference(); } private void _InitPreference(){ _System_Preference = findPreference("system_preference"); _Custom_Id_Preference = (PreferenceWithCustomId)findPreference("custom_id_preference"); _System_Id_Preference = (PreferenceWithSystemId)findPreference("system_id_preference"); _System_Preference.setLayoutResource(); } }
PreferenceWithSystemId.java
package com.example.custompreferencedemo; import android.content.Context; import android.preference.Preference; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; /** * Created by zhuyuqiang on 2016/11/10. */ public class PreferenceWithSystemId extends Preference { private TextView _System_Title; private ImageView _System_Icon; private LayoutInflater _Inflater; private String _Title_Content; public PreferenceWithSystemId(Context context) { this(context,null); } public PreferenceWithSystemId(Context context, AttributeSet attrs) { super(context, attrs); _Inflater = LayoutInflater.from(context); } @Override protected View onCreateView(ViewGroup parent) {