自定义Preference

在系统的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) {
        
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要自定义Preference的布局,可以按照以下步骤操作: 1.创建一个XML布局文件,该文件应包含您希望在Preference中显示的UI元素。例如,如果您希望显示一个文本框和一个开关,可以创建一个包含这些元素的布局文件。 2.在Preference类的子类中,覆盖onCreateView()方法。在这个方法中,使用LayoutInflater加载您的布局文件。 3.在onCreateView()方法中,使用findViewByld()方法获取您的UI元素的引用,并设置它们的值和行为(例如,将文本框的文本设置为Preference存储的值)。 4.如果您希望在用户更改Preference值时更新UI元素,请覆盖onPreferenceChange()方法并在其中更新您的UI元素。 下面是一个示例代码: ```java public class MyPreference extends Preference { private EditText mEditText; private Switch mSwitch; public MyPreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override public View onCreateView(ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.my_preference_layout, parent, false); mEditText = (EditText) view.findViewById(R.id.edit_text); mSwitch = (Switch) view.findViewById(R.id.switch_button); mEditText.setText(getPersistedString("default value")); mSwitch.setChecked(getPersistedBoolean(false)); return view; } @Override public void onPreferenceChange(Preference preference, Object newValue) { if (preference == this) { mEditText.setText((String) newValue); mSwitch.setChecked((Boolean) newValue); } } } ``` 在这个例子中,我们创建了一个名为my_preference_layout.xml的布局文件,其中包含一个EditText和一个Switch。然后,我们在MyPreference类中覆盖了onCreateView()方法来加载这个布局文件,查找EditText和Switch元素,并设置它们的值和行为。我们还覆盖了onPreferenceChange()方法来更新UI元素,以反映Preference值的更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值