【问题标题】:How can I use another Color Picker without preferenceActivity?如何在没有偏好活动的情况下使用另一个颜色选择器?
【发布时间】:2012-03-28 22:12:06
【问题描述】:

我有一个在 sharedPrefereces 中使用的颜色选择器。使用默认颜色选择器,我设法实现了我想要的,但我注意到没有黑色或白色。 http://www.yougli.net/android/a-photoshop-like-color-picker-for-your-android-application/ 我想使用此代码,但在最后几行中,他展示了一个示例,我可以在其中看到它已附加到首选屏幕。取而代之的是,我使用自己的活动和按钮,使用共享首选项我可以保存数据/值(所以它不是一个preferenceActivity,只是一个活动)。例如点击一个布局结果:

OptVertexColor = (LinearLayout) findViewById(R.id.OptVC);
        OptVertexColor.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v) {
            LoadChartVertexColor(); 
                ColorPickerDialog dlg = new ColorPickerDialog(settings.this,
                            new ColorPickerDialog.OnColorChangedListener() {
                        public void colorChanged(int color) {
                          SaveChartVertexColor("vertexcolor", color);
                        }
                    }, loadedVertexColor);
                    dlg.setTitle("Select new color");

                    dlg.show();
                }
        }); 

默认颜色选择器对话框出现,我可以保存颜色。现在我如何在没有偏好屏幕的情况下使用它并实现相同的目标?我试图将上面的代码复制到此代码中,但我不知道如何处理它。

public class MySettings extends PreferenceActivity implements OnPreferenceClickListener, ColorPickerDialog.OnColorChangedListener {

    public boolean onPreferenceClick(Preference pref)

    {

        new ColorPickerDialog(this, this, DROIDS_COLOR_KEY, mPrefs.getInt(DROIDS_COLOR_KEY, DROIDS_COLOR_DEFAULT), DROIDS_COLOR_DEFAULT).show();

        return true;

    }

    public void colorChanged(String key, int color)

    {

        ((PreferenceScreen)this.findPreference(SETTINGS_KEY)).getEditor().putInt(key, color).commit();

    }

}

提前谢谢你!

【问题讨论】:

    标签: android color-picker preferenceactivity


    【解决方案1】:

    在自己的Activity中,添加

    implements ColorPickerDialog.OnColorChangedListener
    

    到类声明。

    添加到您的班级正文:

     public void colorChanged(String key, int color) {
            //create your SharedPreferences and your SharedPreferences.Editor here
            editor.putInt(key, color);
            editor.commit();    
        }
    

    并在按钮点击监听器中添加:

    new ColorPickerDialog(this, this, DROIDS_COLOR_KEY, mPrefs.getInt(DROIDS_COLOR_KEY, DROIDS_COLOR_DEFAULT), DROIDS_COLOR_DEFAULT).show();
    

    这应该可行。如果我未能回答您的问题,请告诉我,我会看看我能做些什么。

    【讨论】:

    • 这有一些问题。第一:第二个应该是 onColorChangedListener,这是 onClickListener,如果我写这个的话。第二,没有 DROIDS_COLOR_KEY 或 DEFAULT,这对我的系统来说是未知的。
    • 你知道我应该为 ColorPickerDialog(..) 写什么吗?我可以将 DROIDS_COLOR_KEY 替换为颜色,所以我的问题在于第二个“this”。
    • 第二个this 不起作用的原因可能是因为它在onClickListener 内。您可以尝试使用ActivityName.this。或者您可以在您的类主体中定义onColorChangedListener listener;,然后在您的onCreate 中创建onColorChangedListener,而不是implementing,然后使用this 而不是第二个this
    • 好吧,我成功了。但。这非常慢,不仅在模拟器上,而且在手机上。当我改变颜色时,它会持续大约两秒钟......无论如何感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多