Раскрывающееся положение и размер всплывающего окна Android-спиннера - PullRequest
0 голосов
/ 25 октября 2018

Мне удалось изменить фон Spinner, и это всплывающий фон.Я могу настроить всплывающие окна android:dropDownHorizontalOffset и android:dropDownVerticalOffset.У меня также есть собственный макет для вращающихся предметов.

Но я застрял с этим видом:

enter image description here

Обратите внимание, какэлементы находятся за пределами раскрывающегося списка.Как я могу это исправить?Есть ли способ как-нибудь вставить отступы сверху и снизу предметов?

<Spinner
        android:id="@+id/branchesSpinner"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:background="@drawable/dropdown_base"
        android:dropDownHorizontalOffset="-5dp"
        android:dropDownVerticalOffset="50dp"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:popupBackground="@drawable/rounded_rectangle_4"
         />

spinner_item_custom_layout:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:textColor="@color/charcoal"
    android:textStyle="bold"
    tools:text="Select Branch"></TextView>

Примечание: фоны, которые я добавил, представляют собой изображения .PNG, а не XML

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

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

public static void setMargins (View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
    ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
    p.setMargins(l, t, r, b);
    v.requestLayout();
}

}

Просто сделайте свою логику для сравненияпозиция выпадающего ребенка.Обратите внимание, что вам нужно установить только верхнее поле.

0 голосов
/ 25 октября 2018

Поскольку вы используете png-файл в качестве всплывающего фона для счетчика, поэтому есть 2 ограничения

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

Решение: Использование9-патч изображения.На официальном сайте Android вы можете найти руководство по использованию draw9patch

Я только что использовал инструмент draw9patch для редактирования rounded_rectangle_4.png.

rounded_rectangle_4.9.png

Вы можете заменить свой текущий фон, а затем попробовать.

...