为什么我的文字变得灰暗?可能上下文与某些事情有关

时间:2016-10-22 16:09:54

标签: java android alertdialog android-context

因此我的AlertDialog的Negative和Positive按钮是灰色的,但它们不应该是灰色的。               greyed-out text screen

我怀疑它与Context有关,因为一旦我与ListView有相同的问题。我通过将ArrayAdapter的引用中的参数从getApplicationContext()更改为getBaseContext()来修复它。有人可以向我解释一下吗?我真的不明白'上下文'

这是我的代码

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("What do you want to do with " + getArrayList("ListOfRecipes").get(position) );
            builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    List<String> list = new ArrayList<>(getArrayList("ListOfRecipes"));
                    Toast.makeText(getBaseContext(), list.get(position) + "has been removed", Toast.LENGTH_SHORT).show();
                    list.remove(position);
                    saveList(list, "ListOfRecipes");
                }
            });

            builder.setNegativeButton("Modify", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    List<String> list = new ArrayList<>(getArrayList("ListOfRecipes"));
                    SharedPreferences sp = getSharedPreferences("Recip", MODE_PRIVATE);
                    SharedPreferences.Editor editor = sp.edit();
                    editor.putString("Recip", list.get(position));
                    editor.apply();

                    startActivity(new Intent(getBaseContext(), ManageRecipeActivity.class));

                }
            });
            AlertDialog alertDialog = builder.create();
            alertDialog.show();

2 个答案:

答案 0 :(得分:0)

Context是android中一个有趣的话题。有一点需要理解,应用程序上下文和活动上下文是不同的。你应该确保任何与UI相关的东西,你应该使用Activity Context。

这可以是

之类的东西
  • 显示对话框
  • 开始另一项活动
  • 充气新布局

    这是因为Activity是实际附加清单中定义的主题的唯一上下文。

我还建议使用Context, What Context文章来全面了解。

快乐编码:)

答案 1 :(得分:0)

首先,如果这段代码在一个活动中,你可以简单地用&#34; 这个&#34;来声明上下文。 (这是通过将MainActivity.this传递给对话框构建器而完成的。

我怀疑的是,可能是您的MainActivity正在为AlertDialog获取一个主题,使按钮看起来是灰色的。您可以在styles.xml中检查(如果有为对话框定义的样式),并在AndroidManifest文件中检查您传递给MainActivity的主题。

如果您没有发现任何错误/不想改变主题,我可以想到解决该问题的两种方法

第一种方式 - 更改按钮颜色(减少工作量,但不太灵活)

第一个实际上是将this post中的对话框按钮颜色更改为您想要的任何颜色。

第二种方式 - 为满足您需求的自定义视图充气(更多工作,但更灵活)

第二种方法是给视图充气并将其传递给对话框。实际上,您根本不必使用标准对话框样式,您可以在其中充气您自己的视图以满足您的需求。

要做到这一点,你必须:

1)对所选视图进行通胀

举个例子:

    LayoutInflater factory = LayoutInflater.from(this);
    final View view = factory.inflate(R.layout.image_dialog_layout, null);            

2)将膨胀的视图传递给对话框构建器:

    final AlertDialog dialog = new AlertDialog.Builder(this);
    dialog.setView(view);
    //Additional code to set click listeners, i.e.
    dialog.create().show();
}

这样,你可以膨胀你想要的任何布局,所以你可以把你想要的按钮放在里面(用你想要的颜色,大小,字体类型)。

重要的是要注意,即使在向视图充气后,您仍然可以使用方法setPositiveButton和setNegativeButton,它们将出现在对话框中的膨胀布局下方。因此,请注意按钮和使用这些方法,因为按钮将显示重复。

因为在这种情况下,您不希望它们变成灰色,所以您希望将按钮放在布局中,使用您想要的任何样式,并对它们进行充气(并通过findViewById在代码中引用它们)。

第二种方式的最大优势在于,您可以使用您想要的样式来充气。如果愿意,您甚至可以将图像放入其中。

希望它有所帮助,让我知道它是否适合你。