2016-10-22 17 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文章得到一個完整的圖片。

編碼快樂:)

相關問題