Подтвердить что ты не робот

Пользовательский диалог на Android: как я могу сосредоточить свое название?

Я разрабатываю приложение для Android.

Как я могу центрировать заголовок для настраиваемого диалогового окна, которое я использую?

4b9b3361

Ответ 1

Просто нашел этот пост, пытаясь понять, как сделать то же самое. Вот как я сделал это для всех, кто находит это в будущем.

Стиль 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);

Ответ 2

Другим способом, который это может быть сделано программно, является использование 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);

Ответ 3

Вы можете сделать это и в коде. Предположим, что у вас есть фрагмент диалога, а затем добавьте следующие строки кода.

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

    TextView textView = (TextView) this.getDialog().findViewById(android.R.id.title);
    if(textView != null)
    {
        textView.setGravity(Gravity.CENTER);
    }
}

Ответ 4

Вы можете сделать это программно без специального вида:

@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

Ответ 5

Если вы не вызываете AlertDialog.Builder.setIcon() и AlertDialog.Builder.setTitle(), тогда ваш пользовательский диалог не отображает встроенный/титульный заголовок. В этом случае вы можете добавить свой собственный заголовок. Вид:

AlertDialog.Builder.setView(View view)

Как только вы создаете этот вид, вы можете реализовать любой тип выравнивания.

Ответ 6

Для вашего пользовательского 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;
}

Ответ 9

Вот скверное решение.... Расширьте AlertDialog.Builder и переопределите все методы (например, setText, setTitle, setView и т.д.), чтобы не устанавливать фактический текст/заголовок/просмотр диалога, но для создания нового представления внутри Диалоговый просмотр делает все там. Тогда вы можете свободно создавать все, что пожелаете.

Чтобы уточнить, что касается родительского класса, параметр View установлен и ничего больше.

Что касается вашего расширенного расширенного класса, все это делается в этом представлении.

Ответ 10

Попробуйте следующее:

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

Ответ 11

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

Ответ 12

Аналогично решению @LandL Partners, но в Котлине:

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)