it-swarm.com.de

Wie erstelle ich einen benutzerdefinierten Spinner wie einen Rand um den Spinner mit dem unteren Dreieck auf der rechten Seite?

Ich möchte einen benutzerdefinierten Spinner wie eine Linie um den Spinner mit einem Dreieck in der rechten unteren Ecke entwickeln.
wie folgendes Bild

enter image description here

Für die obige Abbildung habe ich meinen benutzerdefinierten Spinner wie einen geschrieben

spinner.xml

 <Spinner Android:background="@drawable/spinner_background"/>

spinner_background.xml

<?xml version="1.0" encoding="UTF-8"?>
<item Android:state_pressed="true"
      Android:drawable="@drawable/spinner_ab_pressed_new_theme_bs">
    <shape>

        <solid 
            Android:color="@color/White" />

        <corners Android:radius="3dp" />

        <padding 
            Android:bottom="10dp" 
            Android:left="10dp" 
            Android:right="10dp" 
            Android:top="10dp" />

         <stroke 
            Android:width="2dp" 
            Android:color="@color/skyblue" />
    </shape>
 </item>
 <!-- spinner_ab_default_new_theme_bs -> this image for corner triangle -->
<item

    Android:drawable="@drawable/spinner_ab_default_new_theme_bs" >
    <shape>
        <solid
            Android:color="@color/White">
        </solid>

        <corners Android:radius="3dp" />

        <padding
            Android:bottom="10dp" 
            Android:left="10dp" 
            Android:right="10dp" 
            Android:top="10dp" />
         <stroke 
            Android:width="2dp" 
            Android:color="@color/gray"/>
    </shape>
</item>

Und ich habe Ausgabe wie im folgenden Bild
enter image description here

Ich habe viel versucht, aber mein Ziel nicht erreicht, bitte hat jemand eine Lösung, um Spinner zu entwickeln.
wie oben ein Bild.

53
nilesh wani

Spinner

<Spinner
    Android:id="@+id/To_Units"
    style="@style/spinner_style" />

style.xml

    <style name="spinner_style">
          <item name="Android:layout_width">match_parent</item>
          <item name="Android:layout_height">wrap_content</item>
          <item name="Android:background">@drawable/gradient_spinner</item>
          <item name="Android:layout_margin">10dp</item>
          <item name="Android:paddingLeft">8dp</item>
          <item name="Android:paddingRight">20dp</item>
          <item name="Android:paddingTop">5dp</item>
          <item name="Android:paddingBottom">5dp</item>
          <item name="Android:popupBackground">#DFFFFFFF</item>
     </style>

gradient_spinner.xml (in zeichnungsfähigem Ordner)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item><layer-list>
            <item><shape>
                    <gradient Android:angle="90" Android:endColor="#B3BBCC" Android:startColor="#E8EBEF" Android:type="linear" />

                    <stroke Android:width="1dp" Android:color="#000000" />

                    <corners Android:radius="4dp" />

                    <padding Android:bottom="3dp" Android:left="3dp" Android:right="3dp" Android:top="3dp" />
                </shape></item>
            <item ><bitmap Android:gravity="bottom|right" Android:src="@drawable/spinner_arrow" />
            </item>
        </layer-list></item>

</selector>  

@drawable/spinner_arrow ist Ihr Bild in der unteren rechten Ecke

118
Samadhan Medge

Dies ist eine einfache.

your_layout.xml

<Android.support.v7.widget.AppCompatSpinner
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:background="@drawable/spinner_background"
/>

Im Zeichenordner spinner_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item><layer-list>
    <item>
        <shape>
            <solid
                Android:color="@color/colorWhite">
            </solid>

            <corners Android:radius="3dp" />

            <padding
                Android:bottom="10dp"
                Android:left="10dp"
                Android:right="10dp"
                Android:top="10dp" />
            <stroke
                Android:width="2dp"
                Android:color="@color/colorDarkGrey"/>
        </shape>
    </item>
    <item >
        <bitmap Android:gravity="bottom|right"
        Android:src="@drawable/ic_arrow_drop_down_black_24dp" />
    </item>
  </layer-list></item>
</selector>

Vorschau:

Spinner example

25
96var3

Sie können Folgendes erreichen, indem Sie eine einzelne Zeile in Ihrer Spinner-Deklaration in XML verwenden: enter image description here

Fügen Sie einfach Folgendes hinzu: style="@Android:style/Widget.Holo.Light.Spinner"

Dies ist ein in Android standardmäßig generierter Stil. Es enthält jedoch keine Rahmen. Dafür solltest du besser etwas auf Google suchen.

Hoffe das hilft.

UPDATE: Nach vielem Graben habe ich etwas bekommen, das gut zum Einführen von Border Around Spinner geeignet ist.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:bottom="8dp"
        Android:top="8dp">
        <shape>
            <solid Android:color="@Android:color/white" />
            <corners Android:radius="4dp" />
            <stroke
                Android:width="2dp"
                Android:color="#9E9E9E" />
            <padding
                Android:bottom="16dp"
                Android:left="8dp"
                Android:right="16dp"
                Android:top="16dp" />
        </shape>
    </item>
</layer-list>

Legen Sie dies in den Zeichenordner und verwenden Sie es als Hintergrund für Spinner. So was:

<RelativeLayout
        Android:id="@+id/speaker_relative_layout"
        Android:layout_width="0dp"
        Android:layout_height="70dp"
        Android:layout_marginEnd="8dp"
        Android:layout_marginLeft="8dp"
        Android:layout_marginRight="8dp"
        Android:layout_marginStart="8dp"
        Android:layout_marginTop="16dp"
        Android:background="@drawable/spinner_style"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <Spinner
            Android:id="@+id/select_speaker_spinner"
            style="@style/Widget.AppCompat.DropDownItem.Spinner"
            Android:layout_width="match_parent"
            Android:layout_height="70dp"
            Android:entries="@array/select_speaker_spinner_array"
            Android:spinnerMode="dialog" />

    </RelativeLayout>
6
Karan Thakkar

Es gibt zwei Möglichkeiten, dies zu erreichen.

1- Wie bereits vorgeschlagen, können Sie den Hintergrund Ihres Spinners als benutzerdefiniertes 9-Patch-Image festlegen und alle Anpassungen vornehmen.

Android:background="@drawable/btn_dropdown" 
Android:clickable="true"
Android:dropDownVerticalOffset="-10dip"
Android:dropDownHorizontalOffset="0dip"
Android:gravity="center"

Wenn Sie möchten, dass Ihr Spinner mit verschiedenen Hintergrundfarben angezeigt wird, würde ich empfehlen, das Dropdown-Bild transparent zu machen und den Spinner in einem relativen Layout mit Ihrer eingestellten Farbe zu laden.

btn _dropdown ist wie folgt:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
    Android:state_window_focused="false" Android:state_enabled="true"
    Android:drawable="@drawable/spinner_default" />
<item
    Android:state_window_focused="false" Android:state_enabled="false"
    Android:drawable="@drawable/spinner_default" />
<item
    Android:state_pressed="true"
    Android:drawable="@drawable/spinner_pressed" />
<item
    Android:state_focused="true" Android:state_enabled="true"
    Android:drawable="@drawable/spinner_pressed" />
<item
    Android:state_enabled="true"
    Android:drawable="@drawable/spinner_default" />
<item
    Android:state_focused="true"
    Android:drawable="@drawable/spinner_pressed" />
<item
    Android:drawable="@drawable/spinner_default" />
</selector>

wo die verschiedenen Zustände von png Ihre verschiedenen Zustände von spinner seleti definieren würden

1
Yatin Goswami

Es ist super einfach, Sie können dies einfach zu Ihrem Adapter hinzufügen -> getDropDownView

getDropDownView:

convertView.setBackground(getContext().getResources().getDrawable(R.drawable.bg_spinner_dropdown));

bg_spinner_dropdown:

<?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=enter code here"25dp"
        Android:bottomRightRadius="25dp"
        Android:topLeftRadius="25dp"
        Android:topRightRadius="25dp" />
</shape>
0

Um nur den "Hintergrund" zu ändern (Ecken hinzufügen, Farbe ändern, ....), können Sie ihn in FrameLayout mit dem gewünschten zeichnbaren Hintergrund einfügen. Andernfalls müssen Sie einen Hintergrund mit neun Patches erstellen, damit der Drehpfeil nicht verloren geht. Der Spinnerhintergrund ist transparent.

0
Gurgen Hakobyan

Sie könnten ein einfaches Neun-Patch PNG-Bild entwerfen und es als Hintergrund für das Drehfeld verwenden. Mit GIMP können Sie sowohl Rahmen als auch rechtwinkliges Dreieck in das Bild einfügen.

0
alrama