как создать блесну с границей и разделителем между каждым элементом - PullRequest
0 голосов
/ 24 апреля 2019

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

Я хочу, чтобы мой счетчик выглядел так:

this

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

this.

вот вращатель в макете:

<Spinner
    android:id="@+id/cities_spinner"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_gravity="center"
    android:layout_marginStart="20dp"
    android:layout_marginTop="156dp"
    android:layout_marginEnd="20dp"
    android:background="@drawable/spinner_border"
    android:entries="@array/cities"
    android:popupElevation="0dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.487"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"> 
</Spinner>

вот граница вращателя:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="40dp" />
<stroke
    android:color="#707070"
    android:width="1dp" />
</shape>

Вот текстовое представление для каждого элемента счетчика:

<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView1"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:textColor="#fefcfe"
android:padding="10dp"
android:textSize="18dp"
android:background="@drawable/spinner_item_devider" />

Это spinner_item_devider:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="#707070"/>
    </shape>
</item>
<item android:bottom="1.5dp">
    <shape android:shape="rectangle">
        <solid android:color="@color/white"/>
    </shape>
</item>
</layer-list>

, и это фрагмент кода Java для настройки адаптера:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.cities,R.layout.spinner_text_view);
        adapter.setDropDownViewResource(R.layout.spinner_text_view);
cities.setAdapter(adapter);

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

1 Ответ

0 голосов
/ 24 апреля 2019

Примерно так

<Spinner
    android:id="@+id/cities_spinner"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_gravity="center"
    ...
    android:dropDownVerticalOffset="40dp"
    android:background="@drawable/spinner_border_top"
    android:popupBackground="@drawable/spinner_border_bottom"
    ...
    >
</Spinner>

spinner_border_top

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/white" />
    <corners android:topLeftRadius="20dp"
        android:topRightRadius="20dp"/>
    <stroke
        android:color="#707070"
        android:width="1dp" />
</shape>

spinner_border_bottom

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/white" />
    <corners android:bottomLeftRadius="20dp"
        android:bottomRightRadius="20dp"/>
    <stroke
        android:color="#707070"
        android:width="1dp" />
</shape>

spinner_text_view_1

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:padding="10dp"
    android:textSize="18dp"
/>

spinner_text_view

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:padding="10dp"
    android:background="@drawable/spinner_item_divider"
    android:textSize="18dp"
/>

spinner_item_divider

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:top="0dp"
    android:left="-6dp"
    android:right="-6dp"
    android:bottom="-6dp">

    <shape android:shape="rectangle">
        <stroke
            android:width="1dp"
            android:color="#707070"/>
    </shape>
</item>
</layer-list>

настройка адаптера

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.country_data, R.layout.spinner_text_view_1);
    adapter.setDropDownViewResource(R.layout.spinner_text_view);
    cities.setAdapter(adapter);
...