2016-10-22 88 views
0

因此,AlertDialog的Negative和Positive按钮呈灰色,但它们不应该是灰色的。 greyed-out text screen为什么我的文本变灰了?可能上下文与某事有关

我怀疑它与上下文有关,因为一旦我有我的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(); 
+0

啊我一直在找那个字。谢谢 – TheD3luxed

回答

0

首先,如果这段代码是一个活动里面,你可以简单地声明与语境“”(这是什么,你已经通过传递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在代码中引用它们)。

第二种方式的最大优点是你可以用任何你想要的款式充气,用你想要的款式。如果您愿意,您甚至可以将图像放入其中。

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

+0

太棒了。我需要使用更多的LayoutInflater。感谢您的帮助;) – TheD3luxed

+0

我很高兴我能帮忙:)当我知道我必须自定义很多对话框时,我更喜欢第二个选项,它允许您更自由地使用样式 – FabioR

0

Context是Android的一个有趣的话题。有一点需要了解的是Application Context和Activity Context是不同的。你应该确保任何与UI相关的东西,你应该使用Activity Context。

这可能是东西像

  • 显示一个对话框
  • 开始另一个活动
  • 充气一个新的布局

    这是因为活动是在其上定义的主题,唯一的上下文你的清单实际上是附加的。

我也推荐Context, What Context文章得到一个完整的图片。

编码快乐:)

相关问题