Проблема с отображением пользовательского диалогового окна предупреждения

#android #dialog #android-alertdialog

#Android #диалоговое окно #android-alertdialog

Вопрос:

У меня возникли некоторые проблемы с корректным отображением пользовательского диалогового окна оповещения. Чтобы представить проблему, мое приложение может переключаться между Theme.Holo.Свет и тема.Голографический.Динамически темнеет. Когда я показываю оповещение с макетом по умолчанию, диалоговое окно оповещения наследует тему действия без проблем. Когда я определяю пользовательский макет для диалогового окна оповещения (содержащий текстовые просмотры / редактируемые тексты), они отображаются нормально, когда для приложения установлено значение Theme.Holo.Однако, когда для него установлено значение Theme.Holo, оно темное.Светлый текст в текстовых представлениях отображается очень светло-серым цветом, а границы редактируемого текста и текст почти невидимы (белый на белом фоне). Единственный способ, которым я мог бы несколько исправить это, — напрямую объявить цвет текста в textviews в файле XML-макета пользовательского диалога для каждого текстового поля. Однако, чтобы использовать этот метод, мне нужно было бы создать отдельные макеты для обоих голографических изображений.свет и голограмма.темные темы. В дополнение к этому, я не могу найти никакой информации о том, как изменить цвет границы для поля edittext, что также является проблемой. Я попытался создать и указать тему в AlertDialog.Однако Builder, похоже, никогда не применяет текстовые стили, и, как я уже говорил ранее, я не могу понять, как изменить цвет границы для полей edittext или сделать их специально унаследованными от Holo.Светлая тема. Соответствующий код приведен ниже, и любая помощь будет высоко оценена.

 <?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

    <TableRow android:id="@ id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <TextView android:text="First Name" android:id="@ id/fname" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:text="" android:id="@ id/fname_input" android:layout_width="225sp" android:layout_height="wrap_content"></EditText>
    </TableRow>
    <TableRow android:id="@ id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <TextView  android:text="Last Name" android:id="@ id/lname" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:text="" android:id="@ id/lname_input" android:layout_width="225sp" android:layout_height="wrap_content"></EditText>
    </TableRow>
</TableLayout>
  
  @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             String text = getArguments().getString("text");
             String title = getArguments().getString("title");
             View layout_view = null;

             int layout = getArguments().getInt("layout");
             if(layout != -1){
             LayoutInflater inflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
             layout_view = inflater.inflate(layout, (ViewGroup)getActivity().findViewById(R.layout.main));
             }

             return new AlertDialog.Builder(getActivity()/*,AlertDialog.THEME_HOLO_DARK*/)
                     .setTitle(title)
                     .setMessage(text)
                     .setView(layout_view)
                     .setPositiveButton(android.R.string.ok,
                             new DialogInterface.OnClickListener() {
                                 public void onClick(DialogInterface dialog, int whichButton) {
                                 }
                             }
                     )
                     .create();
         }
  

Комментарии:

1. Разобрался с проблемой. вместо того, чтобы использовать, LayoutInflater inflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); мне нужно было использовать LayoutInflater inflater = getActivity().getLayoutInflater(); Это было глупо…

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