Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使首选项看起来已禁用,但仍注册单击_Android_Preferences - Fatal编程技术网

Android 使首选项看起来已禁用,但仍注册单击

Android 使首选项看起来已禁用,但仍注册单击,android,preferences,Android,Preferences,因此,在我的应用程序的某些状态下,我想禁用设置菜单中的某些复选框首选项。但是,如果用户单击它们,我希望显示一个解释性的toast。如果我只是执行setEnable(false);在CheckBoxPreference上,我确实获得了正确的外观和感觉。但是我不能在点击时看到祝酒词。另一方面,我无法手动使CheckBoxPreference看起来像已禁用一样。除了禁用首选项,您还可以仅禁用首选项的视图 public class DisabledAppearanceCheckboxPreference

因此,在我的应用程序的某些状态下,我想禁用设置菜单中的某些复选框首选项。但是,如果用户单击它们,我希望显示一个解释性的toast。如果我只是执行setEnable(false);在CheckBoxPreference上,我确实获得了正确的外观和感觉。但是我不能在点击时看到祝酒词。另一方面,我无法手动使CheckBoxPreference看起来像已禁用一样。

除了禁用首选项,您还可以仅禁用首选项的视图

public class DisabledAppearanceCheckboxPreference extends CheckBoxPreference {

        protected boolean mEnabledAppearance = false;

        public DisabledAppearanceCheckboxPreference(Context context,
                AttributeSet attrs) {
            super(context, attrs);

        }
    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        boolean viewEnabled = isEnabled()&&mEnabledAppearance;
        enableView(view, viewEnabled);
    }

    protected void enableView( View view, boolean enabled){
        view.setEnabled(enabled);
        if ( view instanceof ViewGroup){
            ViewGroup grp = (ViewGroup)view;
            for ( int index = 0; index < grp.getChildCount(); index++)
                enableView(grp.getChildAt(index), enabled);
        }
    }
    public void setEnabledAppearance( boolean enabled){
        mEnabledAppearance = enabled; 
        notifyChanged();
    }
    @Override
    protected void onClick() {
        if ( mEnabledAppearance)
            super.onClick();
        else{
            // show your toast here
        }
    }

}
公共类DisabledPearanceCheckBoxPreference扩展了CheckBoxPreference{
受保护的布尔值mEnabledAppearance=false;
公共禁用PearanceCheckBoxPreference(上下文,
属性集(属性){
超级(上下文,attrs);
}
@凌驾
受保护的void onBindView(视图){
super.onBindView(视图);
布尔viewEnabled=isEnabled()&&mEnabledAppearance;
启用视图(视图,已启用视图);
}
受保护的void启用视图(视图视图,布尔启用){
view.setEnabled(已启用);
if(视图组的视图实例){
视图组grp=(视图组)视图;
对于(int index=0;index
即使您的首选项被禁用,您也可以收到以下事件:

    public class MyPreferenceFragment extends PreferenceFragment {

    ...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = super.onCreateView(inflater, container, savedInstanceState);
        final ListView listView = (ListView) view.findViewById(android.R.id.list);

        listView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View view, MotionEvent event) {

                int position = listView.pointToPosition((int) event.getX(), (int) event.getY());
                ListAdapter adapter = listView.getAdapter();
                Preference preference = (Preference) adapter.getItem(position);

                if (!preference.isEnabled())
                    Toast.makeText(getActivity(), "Sorry, this setting is not available!", Toast.LENGTH_LONG).show();  

                return false;
            }
        });


        return view;
    }

    ...
}