Intereting Posts
Как загрузить изображение из активов? Нужна помощь в многократном файле изображения POST с использованием модифицированной системы? Как добавить горизонтальную линию 1px над изображением в относительной компоновке? Как установить android Lolipop в eclipse? Различные макеты для горизонтального и вертикального для Android-приложения? Как добавить параметры в HttpURLConnection с помощью POST Проводник DDMS-файлов не может получить доступ к данным \ data (HTC Desire HD) Android: Bitmap to Byte Array и обратно: SkImageDecoder :: Factory возвращен null Как вы проверяете, играет ли музыка с помощью широковещательного приемника? Android-эмулятор против реального устройства Обновление списка при изменении данных адаптера Почему мой onItemSelectedListener не вызван в ListView? Ошибка предварительного компилятора Android на 21.0.1 android sdk Прозрачный AlertDialog имеет черный фон Не может оценивать модуль «реагировать на собственные карты»: конфигурация с именем «по умолчанию» не найдена

Android – стильная панель поиска

Я хотел создать стиль поиска, который похож на тот, что изображен ниже.

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

Используя стандартный поиск, я получу что-то вроде этого:

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

Так что мне нужно только изменить цвет. Мне не нужны дополнительные стили. Есть ли какой-либо прямой подход, чтобы сделать это, или я должен создать свой пользовательский способ.

Я попытался создать обычную, но я не смог получить точный, как показано выше. После использования пользовательского drawable, я получаю, как показано ниже:

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

Если мне нужно создать пользовательский, то, пожалуйста, предложите, как уменьшить ширину линии прогресса, а также форму.

Моя пользовательская реализация:

background_fill.xml:

<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="90" android:centerColor="#FF555555" android:endColor="#FF555555" android:startColor="#FF555555" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#50999999" /> <stroke android:width="1dp" android:color="#70555555" /> </shape> 

progess_fill.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="90" android:centerColor="#FFB80000" android:endColor="#FFFF4400" android:startColor="#FF470000" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#50999999" /> <stroke android:width="1dp" android:color="#70555555" /> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="90" android:centerColor="#FFB80000" android:endColor="#FFFF4400" android:startColor="#FF470000" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#50999999" /> <stroke android:width="1dp" android:color="#70555555" /> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="90" android:centerColor="#FFB80000" android:endColor="#FFFF4400" android:startColor="#FF470000" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#50999999" /> <stroke android:width="1dp" android:color="#70555555" /> </shape> 

progress.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background" android:drawable="@drawable/background_fill"/> <item android:id="@android:id/progress"> <clip android:drawable="@drawable/progress_fill" /> </item> </layer-list> 

thumb.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <gradient android:angle="270" android:endColor="#E5492A" android:startColor="#E5492A" /> <size android:height="20dp" android:width="20dp" /> </shape> 

SeekBar:

 <SeekBar android:id="@+id/seekBarDistance" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="88dp" android:progressDrawable="@drawable/progress" android:thumb="@drawable/thumb" > </SeekBar> 

Solutions Collecting From Web of "Android – стильная панель поиска"

Я бы извлек drawables и xml из исходного кода Android и изменил его цвет на красный. Вот пример, как я завершил это для mdpi drawables:

Пользовательский red_scrubber_control.xml (добавить к res / drawable):

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/red_scrubber_control_disabled_holo" android:state_enabled="false"/> <item android:drawable="@drawable/red_scrubber_control_pressed_holo" android:state_pressed="true"/> <item android:drawable="@drawable/red_scrubber_control_focused_holo" android:state_selected="true"/> <item android:drawable="@drawable/red_scrubber_control_normal_holo"/> </selector> 

Пользовательский: red_scrubber_progress.xml

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background" android:drawable="@drawable/red_scrubber_track_holo_light"/> <item android:id="@android:id/secondaryProgress"> <scale android:drawable="@drawable/red_scrubber_secondary_holo" android:scaleWidth="100%" /> </item> <item android:id="@android:id/progress"> <scale android:drawable="@drawable/red_scrubber_primary_holo" android:scaleWidth="100%" /> </item> </layer-list> 

Затем скопируйте требуемые чертежи из исходного кода Android, которые я взял из этой ссылки

Хорошо скопировать эти чертежи для каждого hdpi, mdpi, xhdpi. Например, я использую только mdpi:

Затем с помощью Photoshop измените цвет с синего на красный:

red_scrubber_control_disabled_holo.png: red_scrubber_control_disabled_holo

red_scrubber_control_focused_holo.png: red_scrubber_control_focused_holo

red_scrubber_control_normal_holo.png: red_scrubber_control_normal_holo

red_scrubber_control_pressed_holo.png: red_scrubber_control_pressed_holo

red_scrubber_primary_holo.9.png: red_scrubber_primary_holo.9

red_scrubber_secondary_holo.9.png: red_scrubber_secondary_holo.9

red_scrubber_track_holo_light.9.png: red_scrubber_track_holo_light.9

Добавить SeekBar в макет:

 <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@drawable/red_scrubber_progress" android:thumb="@drawable/red_scrubber_control" /> 

Результат:

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

Отредактировано:

Вот хороший ресурс Android Holo Colors Generator , который поможет создавать элементы с разными цветами намного быстрее. Просто выберите цвет и элемент, и он создаст требуемую возможность для xhdpi, hdpi и mdpi.

Если вы хотите точно такой же бар, но красным, вы можете добавить цветной фильтр PorterDuff программно. Вы можете получить каждую выписку, которую хотите раскрасить, с помощью методов базового класса ProgressBar . Затем установите для него цветовой фильтр .

 mySeekBar.getProgressDrawable().setColorFilter(new PorterDuffColorFilter(srcColor, PorterDuff.Mode.MULTIPLY)); 

Если желаемая настройка цвета не может быть выполнена через фильтр Porter Duff, вы можете указать свой собственный цветовой фильтр .

Мой ответ вдохновлен Андрасом Балазом Лайтой ответить, что он позволяет работать без XML-файла

 seekBar.getProgressDrawable().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); seekBar.getThumb().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); 

Просто замените цветные атрибуты цветом

background.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="1dp" android:color="#D9D9D9"/> <corners android:radius="1dp" /> </shape> 

progress.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="1dp" android:color="#2EA5DE"/> <corners android:radius="1dp" /> </shape> 

style.xml

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background" android:drawable="@drawable/seekbar_background"/> <item android:id="@android:id/progress"> <clip android:drawable="@drawable/seekbar_progress" /> </item> </layer-list> 

thumb.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:height="30dp" android:width="30dp"/> <stroke android:width="18dp" android:color="#882EA5DE"/> <solid android:color="#2EA5DE" /> <corners android:radius="1dp" /> </shape> 

Google сделал это проще в SDK 21. Теперь у нас есть методы для настройки цвета оттенка большого пальца

 android:thumbTint android:thumbTintMode 

http://developer.android.com/reference/android/widget/AbsSeekBar.html#attr_android:thumbTint http://developer.android.com/reference/android/widget/AbsSeekBar.html#attr_android:thumbTintMode

Как упоминалось выше (@andrew), создание пользовательского SeekBar очень просто с этим сайтом – http://android-holo-colors.com/

Просто включите SeekBar там, выберите цвет и получите все ресурсы и скопируйте проект. Затем примените их в xml, например:

  android:thumb="@drawable/apptheme_scrubber_control_selector_holo_light" android:progressDrawable="@drawable/apptheme_scrubber_progress_horizontal_holo_light" 

Просто установите

андроид: MaxHeight = "3dp"
андроид: MinHeight = "3dp"

Это все.

По умолчанию андроид будет соответствовать цвету вашего слайдера

 `<item name="colorAccent">` 

Значение в ваших styles.xml . Затем, чтобы установить изображение большого пальца пользовательского слайдера, просто используйте этот код в блоке макета SeekBar xml:

 android:thumb="@drawable/slider" 
 <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:progressTint="@color/red" android:thumbTint="@color/red" /> 

Работает так же, как и выбранный ответ. Не нужно делать ни один файл с возможностью рисования или иначе. (Только для IN 5.0)

Если вы используете по умолчанию SeekBar, предоставляемый android Sdk, то это простой способ изменить цвет этого. Просто перейдите в color.xml внутри /res/values/colors.xml и измените colorAccent.

 <resources> <color name="colorPrimary">#212121</color> <color name="colorPrimaryDark">#1e1d1d</color> <!-- change below line --> <color name="colorAccent">#FF4081</color> </resources> 

Я меняю background_fill.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <size android:height="1dp" /> <gradient android:angle="0" android:centerColor="#616161" android:endColor="#616161" android:startColor="#616161" /> <corners android:radius="0dp" /> <stroke android:width="1dp" android:color="#616161" /> <stroke android:width="1dp" android:color="#616161" /> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <size android:height="1dp" /> <gradient android:angle="0" android:centerColor="#616161" android:endColor="#616161" android:startColor="#616161" /> <corners android:radius="0dp" /> <stroke android:width="1dp" android:color="#616161" /> <stroke android:width="1dp" android:color="#616161" /> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <size android:height="1dp" /> <gradient android:angle="0" android:centerColor="#616161" android:endColor="#616161" android:startColor="#616161" /> <corners android:radius="0dp" /> <stroke android:width="1dp" android:color="#616161" /> <stroke android:width="1dp" android:color="#616161" /> </shape> 

И progress_fill.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <size android:height="1dp" /> <gradient android:angle="0" android:centerColor="#fafafa" android:endColor="#fafafa" android:startColor="#fafafa" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#cccccc" /> <stroke android:width="1dp" android:color="#cccccc" /> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <size android:height="1dp" /> <gradient android:angle="0" android:centerColor="#fafafa" android:endColor="#fafafa" android:startColor="#fafafa" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#cccccc" /> <stroke android:width="1dp" android:color="#cccccc" /> </shape> 1 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <size android:height="1dp" /> <gradient android:angle="0" android:centerColor="#fafafa" android:endColor="#fafafa" android:startColor="#fafafa" /> <corners android:radius="1dp" /> <stroke android:width="1dp" android:color="#cccccc" /> <stroke android:width="1dp" android:color="#cccccc" /> </shape> 

Для создания фона и 1dp высоты 1dp .

 LayerDrawable progressDrawable = (LayerDrawable) mSeekBar.getProgressDrawable(); // progress bar line *progress* color Drawable processDrawable = progressDrawable.findDrawableByLayerId(android.R.id.progress); // progress bar line *background* color Drawable backgroundDrawable = progressDrawable.findDrawableByLayerId(android.R.id.background); // progress bar line *secondaryProgress* color Drawable secondaryProgressDrawable = progressDrawable.findDrawableByLayerId(android.R.id.secondaryProgress); processDrawable.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); // progress bar line all color mSeekBar.getProgressDrawable().setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_IN); // progress circle color mSeekBar.getThumb().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN); 

Если вы посмотрите на ресурсы Android, в строке поиска используются изображения.

Вы должны сделать drawable, который прозрачен сверху и снизу, например, 10px, и линия центра 5px видна.

См. Прикрепленное изображение. Вам нужно преобразовать его в NinePatch.

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

Простой способ изменить цвет полосы поиска …

  <ProgressBar android:id="@+id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:theme="@style/Progress_color"/> 

Стиль: Progress_color

  <style name="Progress_color"> <item name="colorAccent">@color/white</item> <!-- Whatever color you want--> </style> 

Изменение класса Java ProgressDrawable ()

 seek_bar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.MULTIPLY); 

Для тех, кто использует привязку данных:

  1. Добавить следующий статический метод в любой класс

     @BindingAdapter("app:thumbTintCompat") public static void setThumbTint(SeekBar seekBar, @ColorInt int color) { seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN); } 
  2. Добавить app:thumbTintCompat атрибут app:thumbTintCompat для вашего SeekBar

     <SeekBar android:id="@+id/seek_bar" style="@style/Widget.AppCompat.SeekBar" android:layout_width="wrap_content" android:layout_height="wrap_content" app:thumbTintCompat="@{@android:color/white}" /> 

Вот и все. Теперь вы можете использовать app:thumbTintCompat с любым SeekBar . Тонов выполнения можно настроить таким же образом.

Примечание. Этот метод также совместим с устройствами с предварительным лепестком.

Вы также можете сделать это следующим образом:

 <SeekBar android:id="@+id/redSeekBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@color/red" android:maxHeight="3dip"/> 

Надеюсь, это поможет!