Android上的自定义对话框:如何将其标题居中?

我正在开发一个Android应用程序。

我怎样才能使用我正在使用的自定义对话框的标题?

谢谢。

刚刚find这篇文章,试图找出如何做同样的事情。 以下是我为未来的其他人所做的。

样式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方法的对话框我想样式我创build对话框是这样的:

 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); } } 

如果您不调用AlertDialog.Builder.setIcon()AlertDialog.Builder.setTitle() ,那么您的自定义对话框将不会显示内置/默认标题View。 在这种情况下,您可以添加自定义标题视图:

 AlertDialog.Builder.setView(View view) 

只要你创build了这个视图,就可以实现任何types的alignment。

对于你自定义的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; } 

你在这里有一些启动提示,用于修改对话框的标题: Android – 在运行时更改自定义标题视图不知道它是否可以居中(没有尝试过),但如果它是一个自定义视图,我猜它是很可能。

这里是一个讨厌的解决scheme….扩展AlertDialog.Builder并覆盖所有的方法(如setText,setTitle,setView等),不设置实际的对话框的文本/标题/视图,而是在对话框的视图中创build一个新的视图在那里做一切事情。 那么你可以随心所欲地devise任何样式。

为了澄清,就父母而言,视图是设置的,没有别的。

就您的自定义扩展类而言,一切都是在该视图内完成的。

 TextView titleView = (TextView) dialog.findViewById(android.R.id.title); if(titleView != null) { titleView.setGravity(Gravity.CENTER); } 

有关更多详细信息,请参阅Android对话框和AlertDialog上的KodeCenter文章 。

尝试这个:

 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();