私はAndroidアプリケーションを開発しています。
使用しているカスタムダイアログのタイトルを中央に配置するにはどうすればよいですか?
同じことをする方法を見つけようとしているときに、この投稿を見つけました。将来これを見つけた他の人のために私がそれをどのようにしたかを以下に示します。
スタイルxmlは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="PauseDialog" parent="@Android:style/Theme.Dialog">
<item name="Android:windowTitleStyle">@style/PauseDialogTitle</item>
</style>
<style name="PauseDialogTitle" parent="@Android:style/TextAppearance.DialogWindowTitle">
<item name="Android:gravity">center_horizontal</item>
</style>
<style name="DialogWindowTitle">
<item name="Android:maxLines">1</item>
<item name="Android:scrollHorizontally">true</item>
<item name="Android:textAppearance">@Android:style/TextAppearance.DialogWindowTitle</item>
</style>
</resources>
そして、スタイルを設定するダイアログのアクティビティonCreateDialogメソッドで、次のようなダイアログを作成します。
Dialog pauseDialog = new Dialog(this, R.style.PauseDialog);
pauseDialog.setTitle(R.string.pause_menu_label);
pauseDialog.setContentView(R.layout.pause_menu);
これをプログラムで行う別の方法は、setCustomTitle()を使用することです。
// Creating the AlertDialog with a custom xml layout (you can still use the default Android version)
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.viewname, null);
builder.setView(view);
TextView title = new TextView(this);
// You Can Customise your Title here
title.setText("Custom Centered Title");
title.setBackgroundColor(Color.DKGRAY);
title.setPadding(10, 10, 10, 10);
title.setGravity(Gravity.CENTER);
title.setTextColor(Color.WHITE);
title.setTextSize(20);
builder.setCustomTitle(title);
コードでも同様に行うことができます。ダイアログフラグメントがあると仮定して、次のコード行を追加します。
@Override
public void onStart()
{
super.onStart();
TextView textView = (TextView) this.getDialog().findViewById(Android.R.id.title);
if(textView != null)
{
textView.setGravity(Gravity.CENTER);
}
}
カスタムビューなしでプログラムで実行できます。
@Override
public void onStart()
{
super.onStart();
TextView textViewVanilla = (TextView) this.getDialog().findViewById(Android.R.id.title);
if(textViewVanilla != null)
{
textViewVanilla.setGravity(Gravity.CENTER);
}
// support for appcompat v7
TextView textViewAppcompat = (TextView) this.getDialog().findViewById(Android.support.v7.appcompat.R.id.alertTitle);
if(textViewAppcompat != null)
{
textViewAppcompat.setGravity(Gravity.CENTER);
}
}
アイデアをありがとう @ hesam appcompatレイアウトについては、Android/sdk/platforms/Android-26/data/res/layout/alert_dialog_title_material.xml
カスタムDialogFragmentの場合、これを実行できます。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = super.onCreateDialog(savedInstanceState);
final TextView textView = (TextView) dialog.findViewById(Android.R.id.title);
if(textView != null) {
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
}
return dialog;
}
AlertDialog.Builder.setIcon()
およびAlertDialog.Builder.setTitle()
を呼び出さない場合、カスタムダイアログには組み込み/デフォルトのタイトルビューが表示されません。この場合、カスタムタイトルビューを追加できます。
AlertDialog.Builder.setView(View view)
このビューを作成するのはあなたであるとすぐに、あらゆるタイプのアライメントを実装することが可能です。
TextView titleView = (TextView) dialog.findViewById(Android.R.id.title);
if(titleView != null) {
titleView.setGravity(Gravity.CENTER);
}
詳細については、 このKodeCenterの記事Android Dialog and AlertDialog を参照してください。
@LandLパートナーソリューションに似ていますが、Kotlinで:
val builder = AlertDialog.Builder(this)
val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val view = inflater.inflate(R.layout.viewname, null)
builder.setView(view)
val title = TextView(this)
title.setText("Custom Centered Title")
title.setBackgroundColor(Color.DKGRAY)
title.setPadding(10, 10, 10, 10)
title.setGravity(Gravity.CENTER)
title.setTextColor(Color.WHITE)
title.setTextSize(20)
builder.setCustomTitle(title)
これは厄介な解決策です... AlertDialog.Builderを拡張し、すべてのメソッド(setText、setTitle、setViewなど)をオーバーライドして、実際のダイアログのテキスト/タイトル/ビューを設定せず、ダイアログのビュー内に新しいビューを作成しますそこにすべてをします。その後、好きなようにすべてをスタイルできます。
明確にするために、親クラスに関する限り、ビューが設定され、それ以外は何も設定されていません。
カスタム拡張クラスに関する限り、すべてはそのビュー内で実行されます。
これを試して:
TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle);
if(titleText != null) {
titleText.setGravity(Gravity.CENTER);
}
完全なコード(Android.support.v7.app.AlertDialog
を使用):
AlertDialog.Builder helpDialogBuilder = new AlertDialog.Builder(context)
.setTitle(/*your title*/)
.setMessage(/*your message*/)
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/*you can do something here*/
dialog.dismiss();
}
})
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/*you can do something here*/
dialog.dismiss();
}
});
final AlertDialog helpDialog = helpDialogBuilder.create();
helpDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
TextView titleText = (TextView) helpDialog.findViewById(R.id.alertTitle);
if(titleText != null) {
titleText.setGravity(Gravity.CENTER);
}
TextView messageText = (TextView) helpDialog.findViewById(Android.R.id.message);
if(messageText != null) {
messageText.setGravity(Gravity.CENTER);
}
}
});
helpDialog.show();
AlertDialog alertDialog = new AlertDialog.Builder(activity)
.setMessage(message)
.create();
alertDialog.setIcon(R.mipmap.ic_launcher_round);
@SuppressLint("RestrictedApi")
DialogTitle titleView=new DialogTitle(activity);
titleView.setText(title);
titleView.setPaddingRelative(32,32,32,0);
alertDialog.setCustomTitle(titleView);
ダイアログのタイトルを変更するためのいくつかの開始のヒントがあります: Android-実行時にカスタムタイトルビューを変更する 中央揃えできるかどうかわからない(試していない)それはカスタムビューです。非常に可能性が高いと思います。