Настройка конечных точек панели поиска

Я хочу обновить пользовательский интерфейс панели поиска, чтобы на обеих конечных точках панели поиска были вертикальные линии. Я попробовал это, установив пользовательское рисуемое изображение (горизонтальная линия с вертикальными линиями в конечных точках) в атрибуте android:progressDrawable, но с этой панелью поиска не видно (виден только большой палец). Я также попытался создать настраиваемые представления слева и справа от панели поиска, но при этом вертикальные линии не остаются в точном положении на другом устройстве. Кроме того, поскольку панель поиска имеет по умолчанию левое и правое заполнение, мне нужно указать поля, чтобы отображать вертикальные линии точно в конечных точках панели поиска, которые могут быть разными для разных устройств.

Каков идеальный подход для достижения этого требования?

<SeekBar 
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="@dimen/dp1" 
android:paddingLeft="0px" 
android:paddingRight="0px" 
android:progressDrawable="@color/white"/>

<View
android:layout_width="@dimen/dp1"
android:layout_height="@dimen/dp10"
android:layout_alignLeft="@+id/seekBar"
android:layout_alignTop="@+id/seekBar"
android:layout_marginLeft="@dimen/dp16"
android:bawrckground="@color/white"
android:id="@+id/view" />
<View
android:layout_width="@dimen/dp1"
android:layout_height="@dimen/dp10"
android:layout_alignRight="@+id/seekBar"
android:layout_alignTop="@+id/seekBar"
android:layout_marginRight="@dimen/dp16"
android:background="@color/white”/>

person Android Developer    schedule 27.08.2016    source источник
comment
хорошо .можете показать какой-нибудь прототип ??   -  person IntelliJ Amiya    schedule 30.08.2016
comment
@IntelliJAmiya В настоящее время я не могу поделиться изображением. Но панель поиска должна выглядеть просто как горизонтальная линия с вертикальными конечными точками. Вертикальная линия должна располагаться под прямым углом к ​​горизонтальной линии.   -  person Android Developer    schedule 30.08.2016
comment
Это проблема xml.   -  person IntelliJ Amiya    schedule 30.08.2016
comment
@IntelliJAmiya Какая проблема есть в xml? По сути, я хочу показать вертикальные линии в конечных точках дорожки (линии) панели поиска.   -  person Android Developer    schedule 30.08.2016
comment
А как насчет ответа ниже?   -  person IntelliJ Amiya    schedule 30.08.2016
comment
@IntelliJAmiya Вертикальные линии должны точно находиться в конечных точках дорожки панели поиска. Проблема в том, что панель поиска имеет некоторые отступы по умолчанию, и поэтому линии не видны точно в конечной точке дорожки.   -  person Android Developer    schedule 30.08.2016
comment
@IntelliJAmiya Также вертикальная линия должна быть под прямым углом к ​​горизонтальной линии. Она не должна опускаться ниже горизонтальной линии.   -  person Android Developer    schedule 30.08.2016
comment
@AndroidLearner Я добавил несколько примеров изображений в свой ответ. Вы можете попробовать, если это то, что вы хотите   -  person Rehan    schedule 31.08.2016


Ответы (3)


Думаю, вы уже ответили на свой вопрос. Как вы сказали, разница только из-за левого и правого заполнения, тогда вы можете добиться этого, просто изменив поля представлений следующим образом. Предположим, это ваш XML:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:id="@+id/view1"
        android:layout_width="1dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/seekBar"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/seekBar"
        android:background="@android:color/black" />

    <View
        android:id="@+id/view2"
        android:layout_width="1dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/seekBar"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/seekBar"
        android:background="@android:color/black" />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:maxHeight="1dp"
        android:progressDrawable="@android:color/black" />
</RelativeLayout>

Затем просто добавьте следующие строки в ваш java-файл:

SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
((ViewGroup.MarginLayoutParams) findViewById(R.id.view1).getLayoutParams()).leftMargin = seekBar.getPaddingLeft();
((ViewGroup.MarginLayoutParams) findViewById(R.id.view2).getLayoutParams()).rightMargin = seekBar.getPaddingRight();

Это определенно не лучшее решение, но да, это довольно просто.

Вот несколько фотографий того, как это выглядит Изображение 1 Изображение 2 Изображение 3

person Rehan    schedule 30.08.2016

Вы ищете что-то вроде этого? Я использовал вес макета с 0,05 для конечных точек и 0,90 (%) для панели поиска ... также с учетом большого пальца. вы можете изменить его по вашему требованию.

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

<LinearLayout
    android:id="@+id/ll_wizard_bar"
    style="@style/Widget.AppCompat.ButtonBar"
    android:layout_width="match_parent"
    android:layout_gravity="center_vertical"
    android:layout_height="30dp"
    android:layout_margin="18dp"
    android:orientation="horizontal">
    <View
        android:layout_width="0dp"
        android:layout_weight=".05"
        android:layout_height="30dp"
        android:background="#FF0000FF" />

    <SeekBar
        android:id="@+id/my_seekbar"
        android:layout_width="0dp"
        android:layout_weight=".90"
        android:layout_height="wrap_content"
        android:maxHeight="15dip"
        android:minHeight="15dip"
        android:thumb="@android:drawable/star_big_off"
        android:progressDrawable="@drawable/oval_shape"
         android:layout_below="@+id/iv_consumericon"
        android:indeterminate="false"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />

    <View
        android:layout_width="0dp"
        android:layout_weight=".05"
        android:layout_height="30dp"
        android:background="#FF0000FF" />
</LinearLayout>

Удалить края

Чтобы панель поиска была прикреплена к вашим вертикальным линиям, программно отрежьте отступы. my_seekbar.setPadding(0, 0, 0, 0);: Предоставлено https://stackoverflow.com/a/33475281/705428

person Android Rao    schedule 30.08.2016
comment
Вертикальные линии должны точно находиться в видимых конечных точках панели поиска. Проблема в том, что панель поиска имеет некоторый отступ по умолчанию, и поэтому линии не видны точно в конечной точке. - person Android Developer; 30.08.2016
comment
В вашем случае также есть некоторый разрыв ч / б вертикальных линий и конечной точки панели поиска. - person Android Developer; 30.08.2016
comment
Это новое требование, о котором не упоминалось в вашем исходном вопросе... Однако Android настраивает панель поиска в зависимости от размера изображения удара... так, чтобы был виден полный большой палец. если вы удалите мой собственный большой палец и возьмете большой палец по умолчанию, поддерживаемый Android... он должен выполнять вашу работу.... Другой альтернативой является использование относительного макета и размещение видов конечных точек, перекрывающих края изображения. - person Android Rao; 30.08.2016
comment
Я думаю, это понятно из вопроса. Кроме того, поскольку панель поиска имеет по умолчанию левое и правое заполнение, мне нужно указать поля, чтобы отображать вертикальные линии точно в конечных точках панели поиска, которые могут быть разными для разных устройств. - person Android Developer; 30.08.2016
comment
я сейчас использую только большой палец по умолчанию - person Android Developer; 30.08.2016
comment
Извините... я не правильно понял эту часть... my_seekbar.setPadding(0, 0, 0, 0); должен творить чудеса... Предоставлено stackoverflow.com/a/33475281/705428 - person Android Rao; 30.08.2016
comment
Попробуйте прагматично (не через XML), это работает... . я тоже пробовал. - person Android Rao; 30.08.2016
comment
+ один к вашему ответу. Но добавив, что большой палец обрезается при перетаскивании к конечным точкам. Любой способ решить эту проблему? - person Android Developer; 30.08.2016

Решения

Вы можете использовать программный способ. Здесь вызов setPadding.

Представление может увеличить пространство, необходимое для отображения полос прокрутки, в зависимости от стиля и видимости полос прокрутки. Таким образом, значения, возвращаемые функциями getPaddingLeft(), getPaddingTop(), getPaddingRight() и getPaddingBottom(), могут отличаться от значений, установленных в этом вызове.

Демонстрационный XML

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

    <View
        android:id="@+id/view1"
        android:layout_width="10dp"
        android:layout_height="50dp"
        android:background="#54d66a"
         />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:progress="0"
         android:max="100"
        android:layout_toRightOf="@+id/view1"/>

    <View
        android:layout_width="10dp"
        android:layout_height="50dp"
        android:background="#000000"
        android:layout_toRightOf="@+id/seekBar"
        />
</RelativeLayout>

Класс Java

при создании()

SeekBar SeekBarOb=(SeekBar)findViewById(R.id.seekBar);
SeekBarOb.setPadding(20,0,0,0);

Неправильный подход

Использование жестко закодированного значения. Вызов DisplayMetrics .

Структура, описывающая общую информацию об отображении, такую ​​как его размер, плотность и масштабирование шрифта.

DisplayMetrics metrics = getResources().getDisplayMetrics();

        int DeviceTotalWidth = metrics.widthPixels;
        int DeviceTotalHeight = metrics.heightPixels;

Теперь для отзывчивого

 SeekBarOb.setPadding(DeviceTotalWidth*2/100 ,0,0,0); // add your value

Наконец-то

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

К вашему сведению

Не изменяйте демонстрационный XML, добавьте это в свой класс Java.

 DisplayMetrics metrics = getResources().getDisplayMetrics();

    int DeviceTotalWidth = metrics.widthPixels;
    int DeviceTotalHeight = metrics.heightPixels;

    SeekBar SeekBarOb=(SeekBar)findViewById(R.id.seekBar);
    SeekBarOb.setPadding((int) (DeviceTotalWidth*.85/100),0, (int) (DeviceTotalWidth*2.10/100),0);
person IntelliJ Amiya    schedule 30.08.2016
comment
Но это не фокусируемые виджеты. - person Rehan; 30.08.2016
comment
Большой палец панели поиска обрезается / обрезается, если я перетаскиваю его к конечным точкам, когда я устанавливаю отступ на 0. Но на снимке экрана вы опубликовали, что он показывает нормально. Как вы смогли этого добиться? Разве большой палец не отрезается в вашем случае, если вы установите отступ на 0? - person Android Developer; 30.08.2016
comment
@AndroidLearner Вы использовали там правило #DisplayMetrics? - person IntelliJ Amiya; 31.08.2016
comment
Нет, я просто добавил отступ к 0, используя setPadding - person Android Developer; 31.08.2016
comment
@AndroidLearner Для отзывчивого результата вы должны использовать #DisplayMetrics . - person IntelliJ Amiya; 31.08.2016
comment
@AndroidLearner Проверьте мой раздел #FYI. Здесь он работает нормально - person IntelliJ Amiya; 31.08.2016
comment
@AndroidLearner, если возникнет путаница, спросите. - person IntelliJ Amiya; 31.08.2016
comment
В основном я хочу, чтобы вертикальные линии точно прикреплялись к конечным точкам дорожки поиска без промежутка между ними. Также я хочу, чтобы большой палец панели поиска не обрезался при перетаскивании к конечным точкам. Вы добавляете отступы слева и справа от панели поиска, что сделает Ползунок панели поиска полностью виден при перетаскивании в конечные точки, но добавит пространство между вертикальными линиями и дорожкой панели поиска. То, что я хочу, может быть достигнуто, если каким-то образом мы сможем сделать так, чтобы большой палец на панели поиска оставался в пределах дорожки, даже если он перетаскивается в конечные точки и устанавливает отступ на 0.. - person Android Developer; 31.08.2016
comment
@AndroidLearner Хорошо. Получили ли вы какие-либо решения. - person IntelliJ Amiya; 05.09.2016