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"

0
Siddarth G 21 juin 2016 à 19:36

2 réponses

Meilleure réponse

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

0
Community 23 mai 2017 à 15:08

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>
0
XxGoliathusxX 22 juin 2016 à 01:02