使用颜色选择器更改片段中edittext的背景颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用颜色选择器更改片段中edittext的背景颜色相关的知识,希望对你有一定的参考价值。

我想使用颜色选择器更改编辑文本的背景颜色。我有一个类,其中有一个editText。我正在使用片段,在片段中正在使用该类的特定editText。在片段中有一个图像视图,单击其上显示颜色选择器对话框。

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
   super.onViewCreated(view, savedInstanceState);
   EditText et = (EditText) view.findViewById(R.id.txtTest);

   ImageView imgChooser = (ImageView) view.findViewById(R.id.imgPallete);

}

public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    imgChooser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AmbilWarnaDialog colorpicker = new AmbilWarnaDialog(getContext(), Color.BLACK, new AmbilWarnaDialog.OnAmbilWarnaListener() {

                @Override
                public void onCancel(AmbilWarnaDialog dialog) {

                }

                @Override
                public void onOk(AmbilWarnaDialog dialog, int color) {
                    et.setBackgroundColor(color);
                }
            });
            colorpicker.show();
        }
    });

}

但这不起作用,并显示java.lang.NullPointerException。有人可以帮帮我吗?我是android studio的新手。

错误日志如下

java.lang.NullPointerException
                                                                                                 at com.example.sudeepbajracharya.myapplication.BackGround$1$1.onOk(BackGround.java:61)
                                                                                                 at yuku.ambilwarna.AmbilWarnaDialog$6.onClick(AmbilWarnaDialog.java:179)
                                                                                                 at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169)
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:107)
                                                                                                 at android.os.Looper.loop(Looper.java:194)
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5371)
                                                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                                 at java.lang.reflect.Method.invoke(Method.java:525)
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
                                                                                                 at dalvik.system.NativeStart.main(Native Method)

问题是在第61行显示,在BackGround.java:61中有 et.setBackgroundColor(颜色);

答案

你的EditText没有正确引用所以尝试下面的代码

private EditText et;
private ImageView imgChooser;

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
   super.onViewCreated(view, savedInstanceState);
   et = (EditText) view.findViewById(R.id.txtTest);

   imgChooser = (ImageView) view.findViewById(R.id.imgPallete);

}

public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    imgChooser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AmbilWarnaDialog colorpicker = new AmbilWarnaDialog(getContext(), Color.BLACK, new AmbilWarnaDialog.OnAmbilWarnaListener() {

                @Override
                public void onCancel(AmbilWarnaDialog dialog) {

                }

                @Override
                public void onOk(AmbilWarnaDialog dialog, int color) {
                    et.setBackgroundColor(color);
                }
            });
            colorpicker.show();
        }
    });

}
另一答案

您可以使用

edittext.setBackgroundResource(R.color.white);

或者如果上面的代码片段不起作用,那么你可以尝试下面的代码

如果你在活动中使用它

edittext.setBackground(ContextCompat.getColor(this,R.color.yourcolor));

如果你在代码下使用片段

edittext.setBackground(ContextCompat.getColor(getActivity(),R.color.yourcolor));

如果你在recyclerview适配器使用下面的代码

edittext.setBackground(ContextCompat.getColor(context,R.color.yourcolor));

因为,edittext.setBackgroundColor()采用数字形式的颜色(例如,红色为0xFFFF0000)。 R.color.white也是一个数字。

并确保你有正确的edittext参考

以上是关于使用颜色选择器更改片段中edittext的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?

设置 EditText 光标颜色

使用jquery动态更改背景颜色后,背景颜色的CSS悬停选择器不起作用

如何在 iPhone 中更改 UIPickerView 的背景颜色

如何在 SwiftUI 中更改分段选取器的颜色外观?

更改 ListView 项目背景颜色但保留默认选择器样式?