Хобрук: Ваш путь к мастерству в программировании

Как изменить заголовок диалогового окна Appcompat и цвет разделителя заголовка?

Есть ли способ изменить заголовок диалогового окна Appcompat и цвет разделителя заголовка? Я не хочу использовать голографический голубой цвет.

Я основал это ссылка, но для голографического освещения и не работает с appcompat.

Заранее спасибо.


Ответы:


1

Единственный способ изменить цвет разделителя заголовков Dialog — создать подкласс Dialog и использовать Resources.getIdentifier для поиска разделителя заголовков View. После этого все, что вам нужно, это позвонить View.setBackgroundColor. Поскольку это единственный способ настроить разделитель заголовков, вы также можете использовать тот же метод для настройки цвета заголовка.

Но что касается того, почему вы не можете получить ответ, который вы связали с работой на вас, трудно сказать. Вы не включаете какой-либо код или что-либо, что вы пробовали, поэтому сложно точно определить, почему вы не получаете желаемых результатов.

Вот пример изменения цвета заголовка и цвета разделителя заголовка:

/**
 * A sublcass of {@link AlertDialog} used to customize the title and title
 * divider colors
 */
public class CustomDialog extends AlertDialog {

    /**
     * Constructor for <code>CustomDialog</code>
     * 
     * @param context The {@link Context} to use
     */
    public CustomDialog(Context context) {
        super(context);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Resources res = getContext().getResources();
        final int yellow = res.getColor(android.R.color.holo_orange_light);

        // Title
        final int titleId = res.getIdentifier("alertTitle", "id", "android");
        final View title = findViewById(titleId);
        if (title != null) {
            ((TextView) title).setTextColor(yellow);
        }

        // Title divider
        final int titleDividerId = res.getIdentifier("titleDivider", "id", "android");
        final View titleDivider = findViewById(titleDividerId);
        if (titleDivider != null) {
            titleDivider.setBackgroundColor(yellow);
        }
    }

}

Реализация

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final CustomDialog customDialog = new CustomDialog(this);
    customDialog.setTitle("Title");
    customDialog.setMessage("Message");
    customDialog.show();
}

Использование DialogFragment с AlertDialog.Builder

public class CustomDialogFragment extends DialogFragment {

    /**
     * Empty constructor as per the {@link Fragment} docs
     */
    public CustomDialogFragment() {
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                .setTitle("Title")
                .setMessage("Message")
                .create();
    }

    @Override
    public void onStart() {
        super.onStart();
        final Resources res = getResources();
        final int yellow = res.getColor(android.R.color.holo_orange_light);

        // Title
        final int titleId = res.getIdentifier("alertTitle", "id", "android");
        final View title = getDialog().findViewById(titleId);
        if (title != null) {
            ((TextView) title).setTextColor(yellow);
        }

        // Title divider
        final int titleDividerId = res.getIdentifier("titleDivider", "id", "android");
        final View titleDivider = getDialog().findViewById(titleDividerId);
        if (titleDivider != null) {
            titleDivider.setBackgroundColor(yellow);
        }
    }

}

Реализация

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new CustomDialogFragment().show(getFragmentManager(), "customDialogFragment");
}

Результаты

Пример

12.04.2014
  • Спасибо. Это работает, но есть ли способ создать это с помощью AlertDialog.Builder? Я использую DialogFragments для диалогов. 12.04.2014
  • @Vanama Я отредактировал пример, используя DialogFragment и AlertDialog.Builder. 12.04.2014
  • Так же, как предупреждение для будущих пользователей, которые могут столкнуться с этим; по какой-то причине, когда я использую только общий диалог, я должен использовать заголовок в качестве имени моего идентификатора вместо alertTitle. 26.11.2014
  • Действительно отличный ответ. Но это больше не работает с appcompat AlertDialog. Кто-нибудь знает, как я могу получить название с помощью android.support.v7.app.AlertDialog? Я много пробовал, но всегда получаю null :-( 29.11.2015
  • title=null и titleDivider=null // скомпилировать 'com.android.support:appcompat-v7:23.1.1' 01.02.2016
  • Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..