Нужно ли конкретным образом специфицировать его компоненты пользовательского интерфейса (Spinner, EditText) при использовании AppCompat

Раньше у меня был DialogFragment , который я явно не специфицировал его компоненты интерфейса (Spinner, EditText).

dialog_fragment_layout.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:orientation="vertical" > <Spinner android:id="@+id/country_spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="200dp" android:layout_marginBottom="10dp" /> <EditText android:id="@+id/name_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textNoSuggestions|textCapWords" android:maxLength="50" android:ems="10" > <requestFocus /> </EditText> </LinearLayout> 

я использую

  • SherlockActionBar
  • Theme.Sherlock.Light.DarkActionBar
  • Android: minSdkVersion = "10", android: targetSdkVersion = "21"

Это выглядит следующим образом

Введите описание изображения здесь

После перехода на

  • AppCompat
  • Theme.AppCompat.Light.DarkActionBar
  • Android: minSdkVersion = "10", android: targetSdkVersion = "22"

Это выглядит следующим образом

Введите описание изображения здесь

Мне было интересно, я делаю что-то неправильно во время моего процесса миграции? Есть ли необходимость в конкретном цвете для DialogFragment интерфейса DialogFragment UI (Spinner, EditText) явно?

Есть ли способ сделать DialogFragment хорошим, без необходимости назначать цвета для Spinner, EditText … так же, как и то, что мы делаем (мы позволяем системе выбирать лучший цвет для Spinner, EditText, …), когда Мы используем SherlockActionBar?

Обратите внимание: я не DialogFragment тему в Activity или DialogFragment . Я только конкретная тема в Application , и я ожидаю, что моя Activity или DialogFragment наследуется от Application .

 <application android:theme="@style/..." > 

Код для DialogFragment – это

Исходный код для DialogFragment

 public class MyDialogFragment extends android.support.v4.app.DialogFragment { public static MyDialogFragment newInstance() { return new MyDialogFragment(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Get the layout inflater LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.dialog_fragment_layout, null); final Spinner countrySpinner = (Spinner)view.findViewById(R.id.country_spinner); final EditText nameEditText = (EditText)view.findViewById(R.id.name_edit_text); final CountryArrayAdapter countryArrayAdapter = new CountryArrayAdapter(this.getActivity()); countrySpinner.setAdapter(countryArrayAdapter); nameEditText.setHint(R.string.new_watchlist_hint); nameEditText.setText(org.yccheok.jstock.watchlist.Utils.getDefaultWatchlistName()); Utils.placeCursorAtEndOfText(nameEditText); final AlertDialog dialog = new AlertDialog.Builder(this.getActivity()) .setTitle(R.string.new_watchlist_title) .setView(view) // Add action buttons .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }) .create(); dialog.setCanceledOnTouchOutside(true); // http://stackoverflow.com/questions/2620444/how-to-prevent-a-dialog-from-closing-when-a-button-is-clicked dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialogInterface) { Button b = dialog.getButton(AlertDialog.BUTTON_POSITIVE); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ... } }); } }); return dialog; } 

Код для отображения DialogFragment

 private void showMyDialogFragment() { FragmentManager fm = this.getActivity().getSupportFragmentManager(); MyDialogFragment myDialogFragment = MyDialogFragment.newInstance(); myDialogFragment.setTargetFragment(this, 0); myDialogFragment.show(fm, MY_DIALOG_FRAGMENT); } 

В поддерживающей библиотеке версии AlertDialog, support.v7.app.AlertDialog , добавленной в Android Support Library 22.1 , добавляется диалоговое окно с одним стилем материала (а также со ссылкой на представления внутри) на все устройства API7 +. Если вы используете AppCompat, вы также должны использовать библиотеку поддержки AlertDialog .

Тема Theme.Sherlock.Light – технически совместимая версия Holo.Light of Holo family. В библиотеке appcompat тема Theme.AppCompat.Light – это версия совместимости семейства Material. Таким образом, следует ожидать такого поведения, поскольку виджеты, такие как Spinner и EditText, имеют новый дизайн материалов.

Если вы хотите сохранить Holo look, вам нужно будет указать свои собственные стили, начиная с values-v21 которые вы позже наследуете в v14 и v11. Это сообщение показывает, как это сделать для spinner: Styling Spinner, appcompat, material