Search code examples
androidpreferencestogglebuttonpreferenceactivity

How do I create one Preference with an EditTextPreference and a Togglebutton?


What I'm trying to implement is basically and exact replica of the image below (the preferences that I've squared). Pressing anything to the left of the preference should open up a dialog. Pressing the togglebutton will disable/enable whatever I'm setting in this preference.

I've been trying for hours now and I've come up empty-handed. How do I implement this in a PreferenceActivity?

Preference

EDIT: It seems people are misunderstanding my question. It is very important that I figure out how to solve my problem using a PreferenceActivity. NOT an Activity. I don't care whether I need to do it in XML or programatically. Just please refrain from providing me with answers that I cannot use within a or something similar.

EDIT 2 : Added a bounty - I really need an answer to this


Solution

  • Hell man, I like your idea :-)

    This is just same as @MH's answer, but more concise.

    I tested with ToggleButton, not Switch.

    package android.dumdum;
    
    import android.content.Context;
    import android.preference.Preference;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.ToggleButton;
    
    public class TogglePreference extends Preference {
    
        public TogglePreference(Context context) {
            super(context);
        }
    
        public TogglePreference(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public TogglePreference(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        public View getView(View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = new LinearLayout(getContext());
                ((LinearLayout) convertView)
                        .setOrientation(LinearLayout.HORIZONTAL);
    
                TextView txtInfo = new TextView(getContext());
    
                txtInfo.setText("Test");
                ((LinearLayout) convertView).addView(txtInfo,
                        new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.MATCH_PARENT,
                                LinearLayout.LayoutParams.WRAP_CONTENT, 1));
    
                ToggleButton btn = new ToggleButton(getContext());
                ((LinearLayout) convertView).addView(btn);
            }
    
            return convertView;
        }
    }
    

    And the preferences.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <PreferenceCategory android:title="Test custom preferences" >
            <android.dumdum.EncryptorEditTextPreference />
            <android.dumdum.TogglePreference />
        </PreferenceCategory>
    
    </PreferenceScreen>
    

    EncryptorEditTextPreference is not related to your question, but it uses same technique (extending EditTextPreference).