XMLレイアウトから拡張されたカスタムダイアログを使用するAndroidアプリがあります。ダイアログのビューのコンテンツはXMLレイアウトから取得されますが、実際の正ボタンと負ボタンは、ビルダーのsetPositiveButtonメソッドとsetNegativeButtonメソッドなので、ボタン自体のスタイルを制御することはできません(または少なくとも制御方法がわかりません)。
DialogFragmentを拡張するLoginConfirmationDialog.Javaファイルから以下のonCreateDialogメソッドを参照してください。基本的に、誰がログインしているかの確認を求める非常に単純なダイアログがポップアップ表示されます(つまり、[はい]ボタンと[いいえ]ボタンが付いた「Areyou Joe Schmoe?」)。
この場合のXMLレイアウトにはTextViewが1つしかないので、これを簡単にするために(ユーザーは、大きなテキストと大きなボタンを必要とする大きなこぶの汚れた指を持つ建設作業員になるため)、TextViewのフォントをかなり大きくしました。ただし、2つのボタンのテキストのフォントははるかに小さく、レイアウトの一部ではなく、setPositiveButtonメソッドとsetNegativeButtonメソッドで追加されるため、フォントサイズを制御するにはどうすればよいですか。
@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();
}
builder.create()
を返す代わりに、これを試してください。-
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;
ボタンに匿名の内部クラスを使用したため、Asokの回答を統合するためにしばらく時間がかかりました。そのため、ボタン参照のハンドルを取得する必要がありました。これは機能します。 messageDialog.show()行の後にあることを確認してください。
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);
注:テキストサイズの単位としてspを使用することをお勧めします。 pxとは異なり、デバイス密度に依存しません。
すでにダイアログにxmlファイルを使用しているので、レイアウトに2つのボタンを含めて、ダイアログの作成でonClick
ハンドラーを設定しないと、次のように機能するはずです。私は似たようなものを使用しています。
簡単な例を次に示します。
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);
次の回答を確認する必要があります。
Dialog.Java(Android src)ではContextThemeWrapperが使用されます。したがって、アイデアをコピーして何かを行うことができます
次のコード行を変更するだけです。
<item name="Android:textSize">10sp</item>
ご希望のサイズに。
そして、答えのコメントもチェックすることを忘れないでください。
幸運を祈ります。
あなたはこれを試すことができます:
AlertDialog.Builder builder = new AlertDialog.Builder(CompQuestionsActivity.this);
builder.setMessage("Message");
builder.setPositiveButton("Yes", dialogClickListener);
builder.setNegativeButton("No", dialogClickListener);
AlertDialog alertDialog = builder.create();
alertDialog.show();
//For positive button:
Button button1 = alertDialog.findViewById(Android.R.id.button1);
button1.setTextSize(25);
//For negative button:
Button button2 = alertDialog.findViewById(Android.R.id.button2);
button2.setTextSize(25);
私のアプローチは、onResume()
でボタンを取得し、そこで構成することです。
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);
}
}