2013-04-09 56 views
7

XMLレイアウトから膨らんだカスタムダイアログを使用するアンドロイドアプリがあります。ダイアログのビューの内容はXMLレイアウトから来ますが、ビルダーのsetPositiveButtonメソッドとsetNegativeButtonメソッドを呼び出すことによって実際のポジティブとネガティブのボタンが追加されるため、スタイリングをコントロールできません(少なくともコントロールする方法はわかりません)ボタン自体のダイアログボタンのテキストのフォントサイズを設定するには

DialogFragmentを拡張するLoginConfirmationDialog.javaファイルの下のonCreateDialogメソッドを参照してください。基本的には、誰がログインしているかを確認するための非常に簡単なダイアログボックスが表示されます(「Are you Joe Schmoe?」、「はい」と「いいえ」ボタン)。

この場合のXMLレイアウトにはTextViewが1つしかありません。これは大規模なテキストや大きなボタンが必要な大きな恋しい人の指を持つ建設作業員になるため、これを簡単にするために、TextViewかなり大きい。しかし、2つのボタンはテキストのフォントがずっと小さく、レイアウトの一部ではなく、setPositiveButtonとsetNegativeButtonメソッドで追加されているので、どのようにフォントサイズを制御できますか?代わりにbuilder.create()を返す

@Override  
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    Bundle args = this.getArguments(); 

    String empName = args.getString("empName");   

    // Use the Builder class for convenient dialog construction   
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_login_confirmation, null); 

    TextView message = (TextView)view.findViewById(R.id.txtLoginConfirmationMessage); 
    message.setText("Are you " + empName + "?"); 

    builder.setView(view);  

    builder.setPositiveButton("Yes", 
      new DialogInterface.OnClickListener() {     
       public void onClick(DialogInterface dialog, int id) { 
        mListener.onEmpConfirmPositiveClick(LoginConfirmationDialog.this); 
       }    
      });    
    builder.setNegativeButton("No", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        mListener.onEmpConfirmNegativeClick(LoginConfirmationDialog.this); 
       } 
      }); 

    // Create the AlertDialog object and return it   
    return builder.create();  
} 
+0

それらを設定し、 'onClick'を設定することですダイアログ作成のハンドラ? – jnthnjns

+0

それは良い点だと思います。私は、デフォルトのボタンをルック・アンド・フィールに使うのが好きですが、ボタンをレイアウトに直接追加してリスナーを設定できると思います。 – Jim

+1

代替アプローチは、この質問で提供され [http://stackoverflow.com/questions/8881710/how-to-reduce-alertdialog-builder-title-font-size-and-positive-button-size] [ 1] [1]:http://stackoverflow.com/questions/8881710/how-to-reduce-alertdialog-builder-title-font-size-and-positive-button-size –

答えて

28

、試すthis.-

final AlertDialog alert = builder.create(); 
alert.setOnShowListener(new DialogInterface.OnShowListener() { 
    @Override 
    public void onShow(DialogInterface dialog) { 
     Button btnPositive = alert.getButton(Dialog.BUTTON_POSITIVE); 
     btnPositive.setTextSize(TEXT_SIZE); 

     Button btnNegative = alert.getButton(Dialog.BUTTON_NEGATIVE); 
     btnNegative.setTextSize(TEXT_SIZE); 
    } 
}); 

return alert; 
3

すでにダイアログにxmlファイルを使用しているので、レイアウトに2つのボタンを含めてダイアログの作成にハンドラを設定するのはなぜですか?私は似たようなものを使っています。ここで

は簡単な例です:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_login_confirmation, null); 

TextView message = (TextView)view.findViewById(R.id.txtLoginConfirmationMessage); 
message.setText("Are you " + empName + "?"); 

Button positiveBtn = (Button) view.findViewById(R.id.dialogButtonPositive); 
    // Set size of button in relation to screen size 
    positiveBtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) 25); 
    positiveBtn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mListener.onEmpConfirmPositiveClick(LoginConfirmationDialog.this); 
     } 
    }); 

Button negativeBtn = (Button) view.findViewById(R.id.dialogButtonNeg); 
// Set size of button in relation to screen size 
negativeBtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) 25); 
negativeBtn.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     mListener.onEmpConfirmNegativeClick(LoginConfirmationDialog.this); 
    } 
}); 

builder.setView(view); 
return builder.create(); 

私もテキストのサイズを設定するための以下のものを使用して、かなり好きです、これはあなたがすることができます(テキストの異なるサイズを取得するために、様々な画面サイズが可能になります)あなたのニーズに合わせてfloat値と遊ぶ:

.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) 25); 
+2

+1。これは素晴らしい答えです。私は、私が取り組んできたこの1つの特定のケースではssantosのソリューションを使いましたが、将来あなたのソリューションも使用する予定です。特に、ボタンをデフォルトのダイアログボタンとは別に配置したい場合は、 – Jim

4

は、私は、ボタンの匿名内部クラスを使用するので、アソークの答えを統合するために、私にしばらく時間がかかったので、私は必要なボタン参照のハンドルを取得します。これは機能します。

messageDialog.show(); 
messageDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextSize(TypedValue.COMPLEX_UNIT_SP, 25.0f); 
messageDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextSize(TypedValue.COMPLEX_UNIT_SP, 25.0f); 

注:それはmessageDialog.show()行の後に行くことを確認してください文字サイズの単位としてSPを使用することをお勧めします。 pxとは異なり、デバイス密度に依存しません。

0

私のアプローチはonResume()のボタンを取得し、あなたはすでにダイアログのXMLファイルを使用しているので、単にレイアウトの2つのボタンが含まれていない理由はそこに

public class LoginConfirmationDialog extends DialogFragment { 

    @Override  
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // your code here remains unchanged 
    } 

    @Override 
    public void onResume() { 
    super.onResume(); 

    Button positiveButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE); 
    positiveButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); 

    Button negativeButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_NEGATIVE); 
    negativeButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); 
    } 
} 
関連する問題