J'ai 8 onglets dans mon application et j'aimerais fournir un accès plus facile aux 4 derniers onglets qui, autrement, doivent être défilés jusqu'à la fin pour les atteindre.
Selon les directives de conception des matériaux, nous pouvons utiliser la liste déroulante dans les onglets, en donnant une option "plus" comme dernier onglet, et si l'utilisateur sélectionne un élément déroulant, cet élément apparaîtra sur l'avant-dernier onglet et sera mis en surbrillance comme onglet sélectionné .
Comment y parvenir ? il n'y a pas de documentation sur la façon de faire cela ? seules les images sont fournies.
Voici le lien vers les directives de conception de matériaux pour les onglets
Voici une image des onglets avec une option "plus"
2 réponses
Je vais répondre à ma propre question, cela pourrait faire gagner du temps à quelqu'un s'il décide d'emprunter cette route.Voici ce que j'ai découvert :-
J'avais posté une question similaire sur les onglets concernant la pagination de débordement dans TabLayout et j'ai reçu une réponse de @ianhanniballake dans laquelle il mentionnait que ces fonctionnalités étaient destinées aux onglets du bureau et non prises en charge dans TabLayout.
Voici le lien vers la question
Je vous recommande d'utiliser PopupMenu. C'est facile à utiliser, ça a l'air super.
Voici un exemple comment je l'utilise:
Activité
View view = findViewById(R.id.action_settings);
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup, null);
final ListView listView = (ListView) popupView.findViewById(R.id.listView);
String[] functions = {getString(R.string.shareScreenshot), getString(R.string.shareDatei), getString(R.string.shareXML)};
ListAdapter adapter = new CustomPopupAdapter(this, functions, listView);
listView.setAdapter(adapter);
Display display = (this.getWindowManager().getDefaultDisplay());
Point size = new Point();
display.getSize(size);
int width = size.x;
//int height = size.y;
Resources resources = this.getResources();
int navigationBarHeight = 0;
int statusbarHeight = 0;
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}
resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusbarHeight = resources.getDimensionPixelSize(resourceId);
}
final PopupWindow popupWindow = new PopupWindow(this);
popupWindow.setContentView(popupView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
popupWindow.setBackgroundDrawable(ContextCompat.getDrawable(this, R.drawable.shadow_02327));
} else {
popupWindow.setBackgroundDrawable(ContextCompat.getDrawable(this, R.drawable.shadow_02327));
}
popupWindow.setWidth(width);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, navigationBarHeight + statusbarHeight);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Click handle
}
});
}
Adaptateur
public class CustomPopupAdapter extends ArrayAdapter {
private String[] option;
ListView owner;
public CustomPopupAdapter(Context context, String[] option, ListView owner) {
super(context, R.layout.custom_row_settings, option);
this.option = option;
this.owner = owner;
}
@Override
public View getView(int pos, View view, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View customView = inflater.inflate(R.layout.popup_row_image_text, parent, false);
ImageView iv = (ImageView) customView.findViewById(R.id.imageView);
TextView tv = (TextView) customView.findViewById(R.id.textView);
tv.setText(option[pos]);
switch (pos) {
case 0:
iv.setImageResource(R.drawable.ic_photo_camera_grey_24dp);
break;
case 1:
iv.setImageResource(R.drawable.ic_insert_drive_file_grey_24dp);
break;
case 2:
iv.setImageResource(R.drawable.ic_code_grey_24dp);
break;
case 3:
iv.setImageResource(R.drawable.ic_move_to_inbox_grey_24dp);
break;
}
return customView;
}
}
popup.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:background="@color/white">
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
Questions connexes
Questions liées
De nouvelles questions
android
Android est le système d'exploitation mobile de Google, utilisé pour la programmation ou le développement d'appareils numériques (Smartphones, tablettes, automobiles, téléviseurs, Wear, Glass, IoT). Pour les sujets liés à Android, utilisez des balises spécifiques à Android telles que l'intention d'Android, l'activité d'Android, l'adaptateur Android, etc. Pour les questions autres que le développement ou la programmation, mais liées au cadre Android, utilisez ce lien: https: // android.stackexchange.com.