2016-10-22 1 views
0

私のAlertDialogのNegativeボタンとPositiveボタンはグレー表示されていますが、そうではありません。 greyed-out text screenテキストがグレー表示になっているのはなぜですか?おそらくコンテキストは何かと関係があります

私はListViewと同じ問題があったので、Contextと関係があると思われます。私は、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(ダイアログに定義されているスタイルがある場合)とMainActivityに渡すテーマのAndroidManifestファイルで確認できます。

あなたが間違ったことを見つけたり、テーマを変更したくない場合は、という2つの方法でこの問題を解決することができます。

最初の方法 - ボタンの色(以下の作業が、あまり柔軟性を)変更

それはあなたが好きな色に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を使ってコード内で参照する)。

2番目の方法の最大の利点は、あなたが望むスタイルであなたが好きなものを膨らませることができることです。。あなたが望むならば、それの中にイメージを置くことさえできます。

ご協力いただければ幸いです。

+0

それは素晴らしいです。もっとLayoutInflaterを使う必要があります。助けてくれてありがとう;) – TheD3luxed

+0

私は助けることができてうれしいです:)私は多くのダイアログをカスタマイズする必要があることを知っているときは、私はスタイルでより自由に作業することができます – FabioR

0

Contextはアンドロイドで興味深いトピックである私のコードです。また、アプリケーションコンテキストとアクティビティコンテキストが異なることを理解することが重要です。 UIに関連するものがあれば、Activity Contextを使用する必要があります。

これは

  • アクティビティがテーマで定義されている唯一のコンテキストがあるので、これは新しいレイアウト

    を膨張させる別のアクティビティ

  • の起動ダイアログ

  • を表示のようなものすることができマニフェストは実際に添付されます。

完全な画像を得るには、Context, What Contextの記事もお勧めします。

ハッピーコーディング:)すべての

関連する問題