Настраиваемая панель поиска с дизайном материалов

#android #material-design

#Android #материал-дизайн

Вопрос:

У меня есть панель поиска в макете для пользовательских настроек диалогового окна. Я изменил свой styles.xml чтобы использовать новый дизайн материала. Это работает, потому что он изменяет текст и флажки в моих настройках, но я не могу применить цвет к своей панели поиска. Это работает, только если я помещаю панель поиска в действие, это означает, что я должен что-то сделать в своем пользовательском макете, но я не знаю, что. Я публикую styles.xml и макет с панелью поиска:

 <?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="android:Theme.Material">

        <!-- Main theme colors -->
        <!-- your app's branding color (for the app bar) -->
        <item name="android:colorPrimary">#FFFF4444</item>
        <!-- darker variant of colorPrimary (for status bar, contextual app bars) -->
        <item name="android:colorPrimaryDark">#FFCC0000</item>
        <!-- theme UI controls like checkboxes and text fields -->
        <item name="android:colorAccent">#FFFF00</item>
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
    </style>

</resources>
  

настраиваемый макет для настройки диалогового окна:

 <?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:orientation="vertical" >

    <SeekBar
        android:id="@ id/seek_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="6dip"
        android:theme="@android:style/Theme.Material"
        android:layout_marginTop="6dip" />

</LinearLayout>
  

Ответ №1:

С Lollipop это больше не нужно вообще. Цвета хорошо применяются даже в диалоговых окнах пользовательских настроек ~ greywolf82

Я хочу поделиться несколькими пользовательскими библиотеками

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

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

или

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

Настраиваемая панель поиска Lib DiscreteSeekBar

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

1. С Lollipop это больше не нужно вообще. Цвета хорошо применяются даже в диалоговых окнах пользовательских настроек.

2. @greywolf82 вы имеете в виду, что новая библиотека Appcompat будет это делать? глядя на поддержку до 2.3?

3. Да, даже если поддержка Appcompat ограничена, но с lollipop работает как шарм.

Ответ №2:

Вам не нужно указывать атрибут android: theme в элементе панели поиска. Вместо этого вам следует настроить темы диалогового окна по умолчанию и диалогового окна оповещений в вашей AppBaseTheme:

 <style name="AppBaseTheme" parent="android:Theme.Material">
    ...
    <item name="android:dialogTheme">@style/AppDialogTheme</item>
    <item name="android:alertDialogTheme">@style/AppAlertTheme</item>
</style>

<style name="AppDialogTheme" parent="android:Theme.Material.Dialog">
    <item name="android:colorPrimary">#FFFF4444</item>
    <item name="android:colorPrimaryDark">#FFCC0000</item>
    <item name="android:colorAccent">#FFFF00</item>
</style>

<!-- This should extend Theme.Material.Dialog.Alert, but that style was
     incorrectly hidden in L-preview. It will be fixed in a future release.
     You can approximate the style using the last two MinWidth attributes.-->
<style name="AppAlertTheme" parent="android:Theme.Material.Dialog">
    <item name="android:colorPrimary">#FFFF4444</item>
    <item name="android:colorPrimaryDark">#FFCC0000</item>
    <item name="android:colorAccent">#FFFF00</item>
    <item name="android:windowMinWidthMajor">65%</item>
    <item name="android:windowMinWidthMinor">95%</item>
</style>
  

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

1. вы знаете, возможно ли что-то подобное даже для holo? colorAccent — это материальный элемент, я ничего не могу найти для holo. Спасибо.

2. Вы можете сделать это программно, установив PorterDuffColorFilter в drawable (см. Drawable.setColorFilter ), но не из XML.

3. Просто попробовал ваше решение, но оно вообще не работает. Материал. Диалоговое окно. Предупреждение не существует. И во всех диалогах с моей панелью поиска по-прежнему используется синяя голограмма. Я думаю, что проблема заключается в предпочтении диалога, он использует конструктор AlertDialog по умолчанию без указания темы, в данном конкретном случае переопределение вообще не работает.

4. Извините, вы совершенно правы, это ошибка в настройках диалогового окна. Это было исправлено внутри, но сломано в выпуске lmp-preview. То же самое с темой диалогового окна оповещения, являющейся общедоступной.

5. Можете ли вы поделиться ссылкой, чтобы увидеть внутреннее исправление? Просто любопытно 🙂