Je développe une application dans laquelle je dois modifier la disposition de l'arrière-plan de la casserole pour qu'elle corresponde à la couleur de l'arrière-plan. J'ai fait des recherches et découvert que je devais créer une image de 9 patchs. J'ai fini de créer l'image de 9 correctifs et de l'utiliser dans l'application, mais elle a l'air plus grande que la visière normale et je ne pouvais pas non plus voir le bouton déroulant de la visière.
Je suis si heureux si vous me fournissez un didacticiel clair dès le début de la création de l'image du correctif pour Spinner et de son utilisation dans l'application.
Code pour le fileur
<Spinner
Android:id="@+id/spnIncredientone"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/txtMixtureTitle"
Android:layout_marginLeft="5dip"
Android:layout_marginRight="5dip"
Android:background="@drawable/spinner_background"
Android:Prompt="@string/selectmixture" />
Vous pouvez définir la couleur d'arrière-plan des fileuses en xml comme ceci:
Android:background="YOUR_HEX_COLOR_CODE"
et si vous utilisez le menu déroulant avec votre spinner, vous pouvez définir sa couleur d'arrière-plan comme suit:
Android:popupBackground="YOUR_HEX_COLOR_CODE"
Vous pouvez changer la couleur de fond et faire défiler les icônes comme cela se fait
Etape 1: Dans le dossier pouvant être dessiné, créez background.xml pour la bordure du disque.
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@Android:color/transparent" />
<corners Android:radius="5dp" />
<stroke
Android:width="1dp"
Android:color="@color/darkGray" />
</shape> //edited
Étape 2: pour la présentation de spinner, utilisez cette icône déroulante ou toute image drop.pnj
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginRight="3dp"
Android:layout_weight=".28"
Android:background="@drawable/spinner_border"
Android:orientation="horizontal">
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true"
Android:layout_gravity="center"
Android:background="@Android:color/transparent"
Android:gravity="center"
Android:layout_marginLeft="5dp"
Android:spinnerMode="dropdown" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:layout_centerVertical="true"
Android:layout_gravity="center"
Android:src="@mipmap/drop" />
</RelativeLayout>
Enfin ressemble à l'image ci-dessous et il est partout cliquable dans la zone ronde et pas besoin d'écrire cliquez sur Lister pour imageView.
Pour plus de détails, vous pouvez voir ici
Même s'il s'agit d'un article plus ancien, mais comme je l'ai trouvé tout en cherchant le même problème, j'ai donc pensé ajouter mes deux sous. Voici ma version de l'arrière-plan de Spinner avec la flèche DropDown. Juste le fond complet, pas seulement la flèche.
Appliquer sur le fileur comme ...
<Spinner
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/spinner_bg" />
spinner_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<color Android:color="@color/InputBg" />
</item>
<item Android:gravity="center_vertical|right" Android:right="8dp">
<layer-list>
<item Android:width="12dp" Android:height="12dp" Android:gravity="center" Android:bottom="10dp">
<rotate
Android:fromDegrees="45"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#666666" />
<stroke Android:color="#aaaaaa" Android:width="1dp"/>
</shape>
</rotate>
</item>
<item Android:width="30dp" Android:height="10dp" Android:bottom="21dp" Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="@color/InputBg"/>
</shape>
</item>
</layer-list>
</item>
</layer-list>
@color/InputBg
devrait être remplacé par la couleur que vous voulez comme arrière-plan.
Tout d'abord, il remplit l'arrière-plan avec la couleur désirée. Ensuite, une liste de couches enfant crée un carré et le fait pivoter de 45 degrés, puis un second rectangle avec une couleur d'arrière-plan recouvre la partie supérieure du carré pivoté, le faisant ressembler à une flèche vers le bas. (Il n’ya pas vraiment de contour dans le rectangle pivoté)
Vous devez créer une nouvelle mise en page personnalisée pour vos éléments de spinner, comme ceci, je l’appellerai:
spinner_item.xml:
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textSize="20sp"
Android:textColor="#ff0000" />
Ensuite, dans votre déclaration de spinner, vous devez faire en sorte que votre spinner utilise la nouvelle présentation de l'adaptateur:
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.layout.spinner_item, YOUR_SPINNER_CONTENT);
spinner.setAdapter(adapter);
Pour personnaliser les éléments de la liste déroulante, vous devez créer une autre présentation, que je nommerai spinner_dropdown_item.xml:
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="Marquee"
Android:textColor="#aa66cc"/>
et ensuite sur l'adaptateur:
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.layout.spinner_item, YOUR_SPINNER_CONTENT);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);
Comme Jakob a souligné , Android:popupBackground
est l'attribut clé de la liste déroulante (état ouvert du Spinner), mais au lieu d'utiliser uniquement une couleur, j'ai obtenu les meilleurs résultats avec un correctif à 9 patchs comme ceci:
menu_dropdown_panel.9.png
Notez qu'il est très facile de générer cette image de 9 correctifs pour la couleur d'arrière-plan de votre choix, par exemple en utilisant cet outil en ligne comme je expliqué dans cette réponse !
Ainsi, ma définition XML Spinner ressemble à ceci:
<Spinner
Android:id="@+id/spinner"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@color/navigationBlue"
Android:spinnerMode="dropdown"
Android:popupBackground="@drawable/menu_dropdown_panel"
/>
Et le résultat:
(Pour les polices personnalisées, comme dans la capture d'écran ci-dessus, un custom SpinnerAdapter est nécessaire aussi.)
Fonctionne au moins sur Android 4.0+ (API de niveau 14+).
Code Spinner
<Spinner
Android:id="@+id/spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textColor="@color/text.white"
Android:paddingBottom="13dp"
Android:background="@drawable/bg_spinner"/>
bg_spinner.xml
<?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="@color/colorPrimaryDark"/>
<corners Android:radius="10dp" />
</shape>
</item>
<item Android:gravity="center_vertical|right" Android:right="8dp">
<layer-list>
<item Android:width="12dp" Android:height="12dp" Android:gravity="center" Android:bottom="10dp">
<rotate
Android:fromDegrees="45"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#ffffff" />
<stroke Android:color="#ffffff" Android:width="1dp"/>
</shape>
</rotate>
</item>
<item Android:width="20dp" Android:height="10dp" Android:bottom="21dp" Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="@color/colorPrimaryDark"/>
</shape>
</item>
</layer-list>
</item>
</layer-list>
code spinner:
<TextView
Android:id="@+id/spinner"
Android:gravity="bottom"
Android:layout_marginTop="16dp"
Android:background="@drawable/spinner_selector"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:paddingLeft="16dp"
Android:textSize="16sp"
Android:text="TextView" />
spinner_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/spinner_enable" Android:state_enabled="true" Android:state_pressed="false" /> <!-- enable -->
<item Android:drawable="@drawable/spinner_clicked" Android:state_pressed="true" Android:state_enabled="true" />
<item Android:drawable="@drawable/spinner_disable" Android:state_enabled="false" /> <!-- disable -->
</selector>
spinner_disable.xml
<?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="#ddf" />
<padding Android:bottom="1dp" />
</shape>
</item>
<item Android:bottom="1dp">
<shape Android:shape="rectangle" >
<solid Android:color="#fff" />
<padding
Android:left="0dp"
Android:right="0dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#fff" />
</shape>
</item>
<item
Android:gravity="center_vertical|right"
Android:right="8dp">
<layer-list>
<item
Android:width="12dp"
Android:height="12dp"
Android:bottom="10dp"
Android:gravity="center">
<rotate
Android:fromDegrees="45"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#ddf" />
<stroke
Android:width="1dp"
Android:color="#aaaaaa" />
</shape>
</rotate>
</item>
<item
Android:width="30dp"
Android:height="10dp"
Android:bottom="21dp"
Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/white" />
</shape>
</item>
</layer-list>
</item>
</layer-list>
spinner_clicked.xml
<?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="#00f" />
<padding Android:bottom="1dp" />
</shape>
</item>
<item Android:bottom="1dp">
<shape Android:shape="rectangle" >
<solid Android:color="#fff" />
<padding
Android:left="0dp"
Android:right="0dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#fff" />
</shape>
</item>
<item
Android:gravity="center_vertical|right"
Android:right="8dp">
<layer-list>
<item
Android:width="12dp"
Android:height="12dp"
Android:bottom="10dp"
Android:gravity="center">
<rotate
Android:fromDegrees="45"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#00f" />
<stroke
Android:width="1dp"
Android:color="#aaaaaa" />
</shape>
</rotate>
</item>
<item
Android:width="30dp"
Android:height="10dp"
Android:bottom="21dp"
Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/white" />
</shape>
</item>
</layer-list>
</item>
</layer-list>
spinner_enable.xml
<?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="#00f" />
<padding Android:bottom="1dp" />
</shape>
</item>
<item Android:bottom="1dp">
<shape Android:shape="rectangle" >
<solid Android:color="#BBDEFB" />
<padding
Android:left="0dp"
Android:right="0dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#BBDEFB" />
</shape>
</item>
<item
Android:gravity="center_vertical|right"
Android:right="8dp">
<layer-list>
<item
Android:width="12dp"
Android:height="12dp"
Android:bottom="10dp"
Android:gravity="center">
<rotate
Android:fromDegrees="45"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#00f" />
<stroke
Android:width="1dp"
Android:color="#aaaaaa" />
</shape>
</rotate>
</item>
<item
Android:width="30dp"
Android:height="10dp"
Android:bottom="21dp"
Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="#BBDEFB" />
</shape>
</item>
</layer-list>
</item>
</layer-list>
spinner_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/spinner_enabled" Android:state_enabled="true" Android:state_pressed="false" /> <!-- enable -->
<item Android:drawable="@drawable/spinner_clicked" Android:state_enabled="true" Android:state_pressed="true" />
<item Android:drawable="@drawable/spinner_disabled" Android:state_enabled="false" /> <!-- disable -->
</selector>
spinner_enabled.xml
<?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="#00f" />
<padding Android:bottom="2dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#fff" />
</shape>
</item>
<item>
<rotate
Android:fromDegrees="90"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="135">
<rotate
Android:fromDegrees="135"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<stroke
Android:width="10dp"
Android:color="#00f" />
<solid Android:color="#00f" />
</shape>
</rotate>
</rotate>
</item>
</layer-list>
spinner_disabled.xml
<?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="#ddf" />
<padding Android:bottom="2dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#fff" />
</shape>
</item>
<item>
<rotate
Android:fromDegrees="90"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="135">
<rotate
Android:fromDegrees="135"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<stroke
Android:width="10dp"
Android:color="#ddf" />
<solid Android:color="#ddf" />
</shape>
</rotate>
</rotate>
</item>
</layer-list>
spinner_focused.xml
<?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="#00f" />
<padding Android:bottom="2dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<solid Android:color="#BBDEFB" />
</shape>
</item>
<item>
<rotate
Android:fromDegrees="90"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="135">
<rotate
Android:fromDegrees="135"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<stroke
Android:width="10dp"
Android:color="#00f" />
<solid Android:color="#00f" />
</shape>
</rotate>
</rotate>
</item>
</layer-list>
cela fonctionne très bien sans images de neuf patchs . api 10 +
Lorsque vous définissez la couleur d'arrière-plan de la roulette à l'aide de
Android:background="@color/your_color"
votre roulette la flèche par défaut va disparaître
Et vous devez également ajouter une largeur et une hauteur fixes à la roulette afin que vous puissiez afficher tout le contenu de la roulette.
j'ai donc trouvé un moyen de le faire, tout comme l'image ci-dessus.
Ecrivez votre code spinner dans une structure de cadre. Dans ce cas, vous n'avez pas besoin d'utiliser une vue d'image distincte pour afficher une icône déroulante.
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Floor"
Android:textColor="@color/white"/>
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="@dimen/margin_short"
Android:background="@drawable/custom_spn_background">
<Spinner
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:dropDownSelector="@color/colorAccent"
Android:dropDownWidth="@dimen/dp_70"
Android:spinnerMode="dropdown"
Android:tooltipText="Select floor" />
</FrameLayout>
Créez un nouveau fichier XML pour l'arrière-plan ou la définition de la mise en page Frame
Android:background="@color/your_color"
custom_spn_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="@dimen/dp_5" />
<solid Android:color="@color/white" />
J'ai essayé les échantillons ci-dessus mais je ne travaillais pas pour moi. La solution la plus simple fonctionne pour moi génial:
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="#fff" >
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:entries="@array/Area"/>
</RelativeLayout>
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Spinner
Android:layout_marginTop="8dp"
Android:background="@drawable/edit_border"
Android:visibility="visible"
Android:id="@+id/teach_repeat"
Android:entries="@array/on_off"
Android:textSize="12sp"
Android:textColor="#ffffff"
Android:layout_width="match_parent"
Android:layout_height="40dp" />
<ImageView
Android:layout_marginTop="8dp"
Android:layout_gravity="end"
Android:src="@drawable/ic_arrow_drop_down_white_18dp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</FrameLayout>
Vous venez d'utiliser ce code
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:baselineAligned="false">
<LinearLayout
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="0.80">
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center_vertical|start"
Android:paddingBottom="5dp"
Android:paddingTop="5dp">
<Spinner
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/spiner_back"
Android:visibility="visible" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical|end"
Android:src="@drawable/ic_arrow_drop_down_black_24dp" />
</FrameLayout>
</LinearLayout>
<LinearLayout
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="0.20">
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@color/colorred"
Android:fontFamily="@font/raleway_extrabold"
Android:text="GO"
Android:textColor="@color/colorwhite" />
</LinearLayout>
</LinearLayout>
Et c'est le fond que j'ai utilisé ...
<?xml version="1.0" encoding="utf-8"?><shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="5dp" />
<solid Android:color="@color/colorwhite" />
Il doit fonctionner avec l'arrière-plan transparent dans un cinéaste.
spinner_enable.xml
<?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="#00000000" />
<padding Android:bottom="2dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle">
<solid Android:color="#00000000" />
</shape>
</item>
<item
Android:bottom="-2dp"
Android:left="-3dp"
Android:right="-3dp"
Android:top="-3dp">
<shape>
<solid Android:color="#00000000" />
<stroke
Android:width="2dp"
Android:color="#00aedb" />
</shape>
</item>
<item>
<rotate
Android:fromDegrees="90"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="135">
<rotate
Android:fromDegrees="135"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<stroke
Android:width="10dp"
Android:color="#00aedb" />
<solid Android:color="#00aedb" />
</shape>
</rotate>
</rotate>
</item>
</layer-list>
spinner_disable.xml
<?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="#00000000" />
<padding Android:bottom="2dp" />
</shape>
</item>
<item>
<shape Android:shape="rectangle">
<solid Android:color="#00000000" />
</shape>
</item>
<item
Android:bottom="-2dp"
Android:left="-3dp"
Android:right="-3dp"
Android:top="-3dp">
<shape>
<solid Android:color="#00000000" />
<stroke
Android:width="2dp"
Android:color="#d9dadc" />
</shape>
</item>
<item>
<rotate
Android:fromDegrees="90"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="135">
<rotate
Android:fromDegrees="135"
Android:pivotX="100%"
Android:pivotY="60%"
Android:toDegrees="45">
<shape Android:shape="rectangle">
<stroke
Android:width="10dp"
Android:color="#d9dadc" />
<solid Android:color="#d9dadc" />
</shape>
</rotate>
</rotate>
</item>
</layer-list>
spinner_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/spinner_enable" Android:state_enabled="true" Android:state_pressed="false" /> <!-- enable -->
<item Android:drawable="@drawable/spinner_disable" Android:state_enabled="false" /> <!-- disable -->
</selector>
Android Studio a un code prédéfini, vous pouvez l'utiliser directement. Android: popupBackground = "HEX COLOR CODE"