J'ai essayé de régler spinner avec une flèche déroulante mais je ne pouvais pas le réparer. Est-ce que quelqu'un peut m'aider avec ça? J'ai joint le code source. J'ai essayé avec le lien ci-dessous mais je ne pouvais pas résoudre le problème http://www.mokasocial.com/2011/03/easily-create-a-default-custom-styled-spinner-Android/
mon dossier de classe:
import Android.os.Bundle;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.ArrayAdapter;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.Spinner;
import Android.widget.AdapterView.OnItemSelectedListener;
import Android.widget.Toast;
public class topup extends Activity {
Spinner spinner,spin1,spin2,spin3;
EditText ed,ed1;
Button btn;
List<String> list, list1,list2,list3;
private String[] countries_list={"01","02","03","04","05","06","07","08","09","10","11","12"};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.topup);
spinner = (Spinner) findViewById(R.id.spinner1);
spin1= (Spinner) findViewById(R.id.spinner2);
spin2= (Spinner) findViewById(R.id.spinner3);
spin3= (Spinner) findViewById(R.id.spinner4);
ed = (EditText) findViewById(R.id.editText3);
list = new ArrayList<String>();
list.add("");
list.add("select");
list.add("01");
list.add("02");
list.add("03");
list.add("04");
list.add("05");
list.add("06");
list.add("07");
list.add("08");
list.add("09");
list.add("10");
list.add("11");
list.add("12");
ArrayAdapter<String> adp = new ArrayAdapter<String>
(this, Android.R.layout.simple_spinner_item, list);
//adp.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adp);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
//@Override
public void onItemSelected(AdapterView<?> parent, View arg1,int arg2, long arg3) {
// TODO Auto-generated method stub
String item = spinner.getItemAtPosition(1).toString();
//Toast.makeText(spinner.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
String ss=spinner.getSelectedItem().toString();
String
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
mon fichier 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"
Android:background="@drawable/back1"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginTop="20dp"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:dropDownWidth="fill_parent"
/>
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/linearLayout1"
Android:layout_alignRight="@+id/linearLayout1"
Android:layout_below="@+id/linearLayout1"
Android:layout_marginTop="25dp"
Android:background="@drawable/red"
Android:ems="10"
Android:hint="enter card number" >
<requestFocus />
</EditText>
<LinearLayout
Android:id="@+id/linearLayout2"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/editText1"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="33dp"
Android:orientation="horizontal"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner3"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
/>
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
/>
<EditText
Android:id="@+id/editText2"
Android:layout_width="22dp"
Android:layout_height="match_parent"
Android:layout_weight="0.18"
Android:ems="10"
Android:hint="enter cvv" />
</LinearLayout>
<LinearLayout
Android:id="@+id/linearLayout3"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignRight="@+id/linearLayout2"
Android:layout_below="@+id/linearLayout2"
Android:layout_marginTop="26dp"
Android:orientation="vertical"
Android:background="@drawable/red" >
</LinearLayout>
<Spinner
Android:id="@+id/spinner4"
Android:layout_width="15dp"
Android:layout_height="18dp"
Android:layout_alignBottom="@+id/linearLayout3"
Android:layout_alignLeft="@+id/linearLayout3"
Android:layout_alignRight="@+id/linearLayout3"
Android:layout_alignTop="@+id/linearLayout3"
/>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/linearLayout3"
Android:layout_marginTop="18dp"
Android:text="Add Amount"
Android:background="@drawable/buttonsty"/>
</RelativeLayout>
copier et coller ce XML au lieu de votre 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"
Android:background="@drawable/back1"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginTop="20dp"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:dropDownWidth="fill_parent"
Android:background="@Android:drawable/btn_dropdown"
/>
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/linearLayout1"
Android:layout_alignRight="@+id/linearLayout1"
Android:layout_below="@+id/linearLayout1"
Android:layout_marginTop="25dp"
Android:background="@drawable/red"
Android:ems="10"
Android:hint="enter card number" >
<requestFocus />
</EditText>
<LinearLayout
Android:id="@+id/linearLayout2"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/editText1"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="33dp"
Android:orientation="horizontal"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner3"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:background="@Android:drawable/btn_dropdown"
/>
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:background="@Android:drawable/btn_dropdown"
/>
<EditText
Android:id="@+id/editText2"
Android:layout_width="22dp"
Android:layout_height="match_parent"
Android:layout_weight="0.18"
Android:ems="10"
Android:hint="enter cvv" />
</LinearLayout>
<LinearLayout
Android:id="@+id/linearLayout3"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignRight="@+id/linearLayout2"
Android:layout_below="@+id/linearLayout2"
Android:layout_marginTop="26dp"
Android:orientation="vertical"
Android:background="@drawable/red" >
</LinearLayout>
<Spinner
Android:id="@+id/spinner4"
Android:layout_width="15dp"
Android:layout_height="18dp"
Android:layout_alignBottom="@+id/linearLayout3"
Android:layout_alignLeft="@+id/linearLayout3"
Android:layout_alignRight="@+id/linearLayout3"
Android:layout_alignTop="@+id/linearLayout3"
Android:background="@Android:drawable/btn_dropdown"
/>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/linearLayout3"
Android:layout_marginTop="18dp"
Android:text="Add Amount"
Android:background="@drawable/buttonsty"/>
</RelativeLayout>
Fondamentalement, il faut créer un arrière-plan personnalisé pour un compteur. Cela devrait être quelque chose comme ça:
spinner_background.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<layer-list>
<item>
<color
Android:color="@Android:color/white"/>
</item>
<item>
<bitmap
Android:gravity="center_vertical|right"
Android:src="@drawable/ic_arrow_drop_down_black_24dp"/>
</item>
</layer-list>
</item>
</selector>
Créez ensuite un style personnalisé pour votre disque, où vous spécifiez le sélecteur ci-dessus comme arrière-plan:
<style name="Widget.App.Spinner" parent="@style/Widget.AppCompat.Spinner">
<item name="overlapAnchor">true</item>
<item name="Android:background">@drawable/spinner_background</item>
</style>
Enfin, dans le thème de votre application, vous devez remplacer deux attributs si vous souhaitez qu’il soit appliqué à l’ensemble de votre application:
<item name="spinnerStyle">@style/Widget.App.Spinner</item>
<item name="Android:spinnerStyle">@style/Widget.App.Spinner</item>
Et c'est à peu près tout.
Pour faire suite à une autre réponse , on m'a demandé comment j'avais changé l'icône représentant une icône pour obtenir quelque chose comme ceci:
Un moyen très simple consiste à utiliser une disposition d’élément custom spinner:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.view_spinner_item,
ITEMS
);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Dans res/layout/view_spinner_item.xml
, définissez un TextView avec Android:drawableRight
pointant sur l'icône souhaitée (avec les personnalisations éventuelles en termes de taille du texte, de marges, etc.):
<?xml version="1.0" encoding="utf-8"?>
<!-- Custom spinner item layout -->
<TextView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerItemStyle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:singleLine="true"
Android:textSize="@dimen/text_size_medium"
Android:drawablePadding="@dimen/spacing_medium"
Android:drawableRight="@drawable/ic_arrow_down"
/>
(Pour l'état ouvert, utilisez simplement Android.R.layout.simple_spinner_dropdown_item
ou créez de la même manière une présentation personnalisée si vous souhaitez modifier tous les aspects de votre disque.)
Pour que l'arrière-plan et les couleurs soient agréables, définissez les Android:background
et Android:popupBackground
de Spinner, comme indiqué dans cette autre question . Et si vous vous interrogiez sur la police personnalisée dans la capture d'écran ci-dessus, vous aurez besoin d'un SpinnerAdapter personnalisé .
Un moyen simple consiste à envelopper votre image Spinner + Drop Down Arrow dans une mise en page. Définissez l’arrière-plan de Spinner comme transparent afin que l’icône de flèche par défaut soit masquée. Quelque chose comme ça:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/background"
Android:orientation="horizontal">
<Spinner
Android:id="@+id/spinner"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_weight="4"
Android:gravity="center"
Android:background="@Android:color/transparent"
Android:spinnerMode="dropdown" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_weight="1"
Android:onClick="showDropDown"
Android:src="@drawable/ic_chevron_down_blue" />
</LinearLayout>
Ici background.xml est un dessin pour produire un fond de type boite.
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@Android:color/transparent" />
<corners Android:radius="2dp" />
<stroke
Android:width="1dp"
Android:color="#BDBDBD" />
</shape>
Le code ci-dessus produit ce type de Spinner et d'icône.
Attachez un style Spinner en utilisant du code Java:
Tout d'abord, vous avez besoin d'un fichier de mise en page tel que ci-dessous:
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="none"
Android:minHeight="?android:attr/listPreferredItemHeight" />
Appelons-le spinner_item.xml et plaçons-le dans le dossier res/layouts.
Ensuite, créez un String ArrayList et mettez-y toutes les options Spinner:
ArrayList<String> spinnerArray = new ArrayList<String>();
spinnerArray.add("Item No. 1");
spinnerArray.add("Item No. 2");
spinnerArray.add("Item No. 3");
spinnerArray.add("Item No. 4");
Enfin, créez l’objet Spinner et associez-lui la disposition de style.
Spinner spinner = new Spinner(getActivity());
spinner.setTag("some_id");
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getActivity(), Android.R.layout.simple_spinner_dropdown_item, spinnerArray); spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
spinner.setAdapter(spinnerArrayAdapter);
Notez que Spinner (getActivity ()) dans la ligne ci-dessus sera remplacé par Spinner (this) si vous écrivez cela à partir de l'intérieur de l'activité plutôt que de l'intérieur d'un fragment.
C'est tout!
Attacher un style de spinner dans un fichier de mise en page Android:
Tout d’abord, créez un fichier XML définissant l’attribut de style (gradient_spinner.xml).
<?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:type="linear" />
<stroke Android:width="1dp" Android:color="@color/colorBackground" />
<corners Android:radius="2dp" />
<padding Android:bottom="1dp" Android:left="1dp" Android:right="1dp" Android:top="1dp" />
</shape></item>
<item Android:right="5dp">
<bitmap Android:gravity="center_horizontal|right" Android:src="@drawable/expand_icon">
<padding Android:right="2dp" />
</bitmap>
</item>
</layer-list></item>
</selector>
Ensuite, dans le fichier style.xml, spécifiez le style et appelez gradient_spinner en tant qu'arrière-plan.
<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">1dp</item>
<item name="Android:paddingLeft">5dp</item>
<item name="Android:paddingRight">5dp</item>
<item name="Android:paddingTop">5dp</item>
<item name="Android:paddingBottom">5dp</item>
</style>
Enfin, attachez le style ci-dessus à la roulette:
<Spinner
Android:id="@+id/agent_id_spinner"
Android:layout_width="match_parent"
Android:layout_height="40dp"
Android:textSize="@dimen/title_text_view"
style="@style/spinner_style" />
C'est tout!
<Spinner
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginRight="16dp"
Android:paddingLeft="10dp"
Android:spinnerMode="dropdown" />
dummy.xml (le dessin devrait être de taille très réduite. J'ai pris 24dp)
<?xml version="1.0" encoding="utf-8"?>
<layer-list Android:opacity="transparent" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:width="100dp" Android:gravity="right" Android:start="300dp">
<bitmap Android:src="@drawable/down_button_dummy_dummy" Android:gravity="center"/>
</item>
</layer-list>
extrait de fichier de mise en page
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
app:cardElevation="5dp"
>
<Spinner
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:background="@drawable/dummy">
</Spinner>
</Android.support.v7.widget.CardView>
Copiez et collez ce XML pour afficher en tant que liste déroulante et changer votre couleur de liste déroulante
<?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"
Android:background="@drawable/back1"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginTop="20dp"
Android:background="@drawable/red">
<Spinner Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:dropDownWidth="fill_parent"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"
/>
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/linearLayout1"
Android:layout_alignRight="@+id/linearLayout1"
Android:layout_below="@+id/linearLayout1"
Android:layout_marginTop="25dp"
Android:background="@drawable/red"
Android:ems="10"
Android:hint="enter card number" >
<requestFocus />
</EditText>
<LinearLayout
Android:id="@+id/linearLayout2"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/editText1"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="33dp"
Android:orientation="horizontal"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner3"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"
/>
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"
/>
<EditText
Android:id="@+id/editText2"
Android:layout_width="22dp"
Android:layout_height="match_parent"
Android:layout_weight="0.18"
Android:ems="10"
Android:hint="enter cvv" />
</LinearLayout>
<LinearLayout
Android:id="@+id/linearLayout3"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignRight="@+id/linearLayout2"
Android:layout_below="@+id/linearLayout2"
Android:layout_marginTop="26dp"
Android:orientation="vertical"
Android:background="@drawable/red" >
</LinearLayout>
<Spinner
Android:id="@+id/spinner4"
Android:layout_width="15dp"
Android:layout_height="18dp"
Android:layout_alignBottom="@+id/linearLayout3"
Android:layout_alignLeft="@+id/linearLayout3"
Android:layout_alignRight="@+id/linearLayout3"
Android:layout_alignTop="@+id/linearLayout3"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"/>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/linearLayout3"
Android:layout_marginTop="18dp"
Android:text="Add Amount"
Android:background="@drawable/buttonsty"/>
À partir de l'API de niveau 16 et supérieur, vous pouvez utiliser le code suivant pour modifier l'icône de liste déroulante dans spinner .
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// give the color which ever you want to give to spinner item in this line of code
//API Level 16 and above only.
((TextView)parent.getChildAt(position)).setCompoundDrawablesRelativeWithIntrinsicBounds(null,null,ContextCompat.getDrawable(Activity.this,R.drawable.icon),null);
//Basically itis changing the drawable of textview, we have change the textview left drawable.
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
espérons que cela aidera quelqu'un.
Définissez l’image de flèche Dropdown sur spinner comme ceci:
<Spinner
Android:id="@+id/Exam_Course"
Android:layout_width="320dp"
Android:background="@drawable/spinner_bg"
Android:layout_height="wrap_content"/>
Ici, Android: background = "@ drawable/spinner_bg" spinner_bg est l’image de flèche déroulante.