Documentation sur la conception des matériaux mentionne à propos du menu déroulant décrit, qui ressemble à ceci:
Comment créer cela dans mon Android? En d'autres termes, je veux créer un spinner avec un contour et un indice en haut.
Ils ont mis à jour la bibliothèque de conception de matériaux:
<com.google.Android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/hint_text">
<AutoCompleteTextView
Android:id="@+id/filled_exposed_dropdown"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
</com.google.Android.material.textfield.TextInputLayout>
C'est le lien: https://material.io/develop/Android/components/menu/
Eh bien, aucune bibliothèque officielle n'a été publiée jusqu'à présent. Donc, vous devez le créer sur mesure. La mienne ressemble à cette image jointe. J'ai fait quelques étapes simples.
Étape 1: ajouter une forme_
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@Android:color/transparent"/>
<stroke Android:width="1dip" Android:color="#424242" />
<corners Android:radius="3dip"/>
<padding Android:left="0dip"
Android:top="0dip"
Android:right="0dip"
Android:bottom="0dip" />
vous pouvez facilement changer la couleur de votre trait à partir d'ici.
étape 2: Concevez le spinner _
<RelativeLayout
Android:id="@+id/lyGiftList"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@id/lyPhysicianList"
Android:layout_marginLeft="@dimen/_5sdp"
Android:layout_marginTop="@dimen/_5sdp"
Android:layout_marginRight="@dimen/_5sdp">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="@dimen/_3sdp"
Android:layout_weight="8"
Android:orientation="horizontal"
Android:background="@drawable/border"
tools:ignore="UselessParent">
<Spinner
Android:id="@+id/spnGift"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:overlapAnchor="false"
Android:spinnerMode="dropdown" />
</LinearLayout>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="@dimen/_9sdp"
Android:layout_marginTop="-5dp"
Android:background="@color/colorLightGrey"
Android:paddingLeft="@dimen/_3sdp"
Android:paddingRight="@dimen/_3sdp"
Android:text="@string/gift"
Android:textColor="@color/colorDarkGrey" />
</RelativeLayout>
Et si vous voulez que la couleur du texte sélectionnée par votre spinner soit différente, vous pouvez le faire à partir du code.
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
((TextView) view).setTextColor(ContextCompat.getColor(MainActivity.this, R.color.colorAccent));
}
Pour créer un spinner de menu de boîte décrit, les étapes que vous devez suivre sont les suivantes:
1.Créez un fichier dessinable dans un dossier dessinable nommé drawable_spinner_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<solid Android:color="#ffffff"/>
<corners Android:radius="5dp"/>
<stroke Android:width="1dp"
Android:color="#797979"/>
</shape>
2.Créez layout_custom_spinner.xml sous le dossier Layout, vous pouvez modifier le texte et l'identifiant selon vos besoins.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/fragment_qc_flSelectWorkDone"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<FrameLayout
Android:layout_marginTop="6dp"
Android:background="@drawable/drawable_spinner_border"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Spinner
Android:layout_marginTop="5dp"
Android:id="@+id/fragment_qc_spSelectWorkDone"
Android:layout_width="match_parent"
Android:textSize="12sp"
Android:spinnerMode="dropdown"
Android:layout_height="30dp"/>
</FrameLayout>
<TextView
Android:paddingStart="2dp"
Android:paddingEnd="2dp"
Android:layout_marginStart="10dp"
Android:layout_marginBottom="15dp"
Android:textSize="9sp"
Android:text="Select Work Done"
Android:background="#FFFFFF"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
</FrameLayout>
J'ai essayé de le faire avec une bordure comme ci-dessous.
Mettre le spinner en activité
<LinearLayout
Android:layout_centerInParent="true"
Android:background="@drawable/border"
Android:layout_width="wrap_content" Android:layout_height="wrap_content" tools:ignore="UselessParent">
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="wrap_content"
Android:backgroundTint="#ff0000"
Android:overlapAnchor="false"
Android:layout_height="wrap_content"
Android:spinnerMode="dropdown"/>
</LinearLayout>
Créer border.xml en dessinable
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="#80ffffff"/>
<stroke Android:width="1dip" Android:color="#ff0000" />
<corners Android:radius="3dip"/>
<padding Android:left="0dip" Android:top="0dip" Android:right="0dip" Android:bottom="0dip" />
Et remplissez-le comme vous le souhaitez.
val items = arrayOf("NM", "NY", "NC", "ND")
val adapter = ArrayAdapter(this, Android.R.layout.simple_spinner_dropdown_item, items)
spinner1.adapter = adapter
Je ne sais pas comment mettre le titre sur le spinner.
Le résultat ressemble à ceci.
Petits ajustements et je pense que vous pouvez créer ce que vous cherchez.
Ajoutez ceci si cela ne fonctionne pas <androidx.appcompat.widget.AppCompatAutoCompleteTextView
<com.google.Android.material.textfield.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
Android:id="@+id/gender"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Gender"/>
</com.google.Android.material.textfield.TextInputLayout>
Résultat:
Code entièrement fonctionnel ci-dessous:
<com.google.Android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Hello"
>
<EditText
Android:id="@+id/editText"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:cursorVisible="false"
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:importantForAutofill="no"
/>
</com.google.Android.material.textfield.TextInputLayout>
editText.setOnClickListener {
PopupMenu(context!!, editText).apply {
menuInflater.inflate(R.menu.menu_in_transaction, menu)
setOnMenuItemClickListener { item ->
editText.setText(item.title)
true
}
show()
}
}
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:id="@+id/type1"
Android:title="Type 1"
/>
<item
Android:id="@+id/type2"
Android:title="Type 2"
/>
</menu>
Selon le référentiel github de conception matérielle d'Android, il est prévu (ce qui signifie qu'ils continueront à travailler dessus). Vous ne pouvez pas trouver un moyen direct de mettre en œuvre cela.