为什么我的文字变灰了?可能上下文与某些事情有关
Why my text is getting greyed-out? Probably Context has to do with something
所以我的 AlertDialog 的 Negative 和 Positive 按钮是灰色的,但它们不应该是。
greyed-out text screen
我怀疑它与上下文有关,因为有一次我的 ListView 遇到了同样的问题。我已通过将 ArrayAdapter 引用中的参数从 getApplicationContext() 更改为 getBaseContext() 来修复该问题。有人可以向我解释吗?我不太明白 'Context'
这是我的代码
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();
Context 是 android 中的一个有趣话题。需要了解的一件事是 Application Context 和 Activity Context 是不同的。您应该确保与 UI 相关的任何内容都应该使用 Activity 上下文。
这可以是
- 显示对话框
- 开始另一个activity
膨胀新布局
这是因为 Activity 是清单中定义的主题实际附加到的唯一上下文。
我也推荐Context, What Context篇文章看全图
快乐编码:)
首先,如果那段代码在 activity 中,您可以简单地用“this”声明上下文(这是您通过将 MainActivity.this) 传递给对话框生成器。
我怀疑 可能 您的 MainActivity 正在为 AlertDialog 设置主题,这使得按钮看起来是灰色的。您可以在 styles.xml(如果为对话框定义了样式)和 AndroidManifest 文件中检查您要传递给 MainActivity 的主题。
如果您没有找到任何东西wrong/don不想更改主题,我可以想到两种解决该问题的方法。
第一种方式——改变按钮颜色(工作量少,但不够灵活)
第一个实际上是将对话框按钮颜色更改为您想要的任何颜色,就像在 中所做的那样。
第二种方式 - 扩充满足您需要的自定义视图(更多工作,但更灵活)
第二种方法是膨胀视图并将其传递给对话框。实际上,您根本不必使用标准对话框样式,您可以在其中扩充自己的视图以满足您的需要。
为此,您必须:
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 在您的代码中引用它们)。
第二种方式最大的好处就是可以随心所欲地充气,随心所欲地充气。如果你愿意,你甚至可以在里面放图片。
希望对您有所帮助,如果对您有用,请告诉我。
所以我的 AlertDialog 的 Negative 和 Positive 按钮是灰色的,但它们不应该是。 greyed-out text screen
我怀疑它与上下文有关,因为有一次我的 ListView 遇到了同样的问题。我已通过将 ArrayAdapter 引用中的参数从 getApplicationContext() 更改为 getBaseContext() 来修复该问题。有人可以向我解释吗?我不太明白 'Context'
这是我的代码
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();
Context 是 android 中的一个有趣话题。需要了解的一件事是 Application Context 和 Activity Context 是不同的。您应该确保与 UI 相关的任何内容都应该使用 Activity 上下文。
这可以是
- 显示对话框
- 开始另一个activity
膨胀新布局
这是因为 Activity 是清单中定义的主题实际附加到的唯一上下文。
我也推荐Context, What Context篇文章看全图
快乐编码:)
首先,如果那段代码在 activity 中,您可以简单地用“this”声明上下文(这是您通过将 MainActivity.this) 传递给对话框生成器。
我怀疑 可能 您的 MainActivity 正在为 AlertDialog 设置主题,这使得按钮看起来是灰色的。您可以在 styles.xml(如果为对话框定义了样式)和 AndroidManifest 文件中检查您要传递给 MainActivity 的主题。
如果您没有找到任何东西wrong/don不想更改主题,我可以想到两种解决该问题的方法。
第一种方式——改变按钮颜色(工作量少,但不够灵活)
第一个实际上是将对话框按钮颜色更改为您想要的任何颜色,就像在
第二种方式 - 扩充满足您需要的自定义视图(更多工作,但更灵活)
第二种方法是膨胀视图并将其传递给对话框。实际上,您根本不必使用标准对话框样式,您可以在其中扩充自己的视图以满足您的需要。
为此,您必须:
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 在您的代码中引用它们)。
第二种方式最大的好处就是可以随心所欲地充气,随心所欲地充气。如果你愿意,你甚至可以在里面放图片。
希望对您有所帮助,如果对您有用,请告诉我。