it-swarm.com.ru

Как включить или подделать мини-вариант из Руководства по дизайну материалов для Android.support.v4.widget.DrawerLayout?

Как включить «мини-вариант» из Руководства по проектированию материалов - чтобы только значки ящика отображались в закрытом состоянии?

mini variant

Как простой тестовый проект для моего вопроса я взял хорошо известный Пример навигационного ящика от Google -, а затем добавил второй ящик с правой стороны и значки для записей ListView с обеих сторон:

screenshot

screenshot

Посоветуйте, пожалуйста, как активировать (или, возможно, подделать?) «Мини-вариант Drawer» - чтобы на правой стороне скриншота выше были видны только музыкальные символы.

Вот мой файл макета Activity_main.xml :

<Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <LinearLayout 
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <Android.support.v7.widget.Toolbar 
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">

        <ImageView 
            Android:src="@drawable/ic_music_note_black_24dp"
            Android:onClick="openActions"
            Android:layout_gravity="right"
            Android:padding="16dp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />

        </Android.support.v7.widget.Toolbar>

        <FrameLayout
            Android:id="@+id/content_frame"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />

    </LinearLayout>

    <ListView
        Android:id="@+id/left_drawer"
        Android:layout_width="240dp"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:choiceMode="singleChoice" />

    <ListView
        Android:id="@+id/right_drawer"
        Android:layout_width="160dp"
        Android:layout_height="match_parent"
        Android:layout_gravity="end"
        Android:choiceMode="singleChoice" />

</Android.support.v4.widget.DrawerLayout>

И MainActivity.Java используя его:

public class MainActivity extends AppCompatActivity {
    private Toolbar mToolbar;
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ListView mActionList;
    private ActionBarDrawerToggle mDrawerToggle;

    private String[] mPlanetTitles;
    private String[] mActions;
    private int[] mIcons;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPlanetTitles = getResources().getStringArray(R.array.planets_array);
        mActions = getResources().getStringArray(R.array.music_actions);

        TypedArray ta = getResources().obtainTypedArray(R.array.music_icons);
        mIcons = new int[ta.length()];
        for (int i = 0; i < mIcons.length; i++)
            mIcons[i] = ta.getResourceId(i, R.drawable.ic_menu_black_24dp);
        ta.recycle();

        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);
        mActionList = (ListView) findViewById(R.id.right_drawer);

        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, mPlanetTitles) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView view = (TextView) super.getView(position, convertView, parent);
                view.setCompoundDrawablePadding(24);
                view.setCompoundDrawablesWithIntrinsicBounds(
                    R.drawable.ic_stars_white_24dp, 0, 0, 0);
                return view;
            }
        });

        mActionList.setAdapter(new ArrayAdapter<String>(this,
            Android.R.layout.simple_list_item_1, mActions) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView view = (TextView) super.getView(position, convertView, parent);
                view.setCompoundDrawablePadding(24);
                view.setCompoundDrawablesWithIntrinsicBounds(mIcons[position], 0, 0, 0);
                return view;
            }
        });

        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* Host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                mToolbar,
                R.string.drawer_open,  /* "open drawer" description for accessibility */
                R.string.drawer_close  /* "close drawer" description for accessibility */
                ) {
            public void onDrawerClosed(View view) {
                mToolbar.setTitle(mTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }

            public void onDrawerOpened(View drawerView) {
                mToolbar.setTitle(mDrawerTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            selectItem(0);
        }
    }

Вот видео, показывающее Gmail для планшетов в этом режиме.

24
Alexander Farber

Официальный NavigationDrawer действительно упоминает «мини-вариант» в их спецификации проекта , но нет документации о том, как его использовать. Возможно, это будет позже, как часть библиотеки поддержки. Обновлю ответ, если/когда будет официальное решение.

До этого взгляните на Библиотека ActionsContentView , делает именно то, что вы хотите. В прошлый раз это были обновления 2 года назад, но это работает, я использовал это некоторое время назад. Вы также можете получить его на Google Play и протестировать его.

Closed stateOpened state

7
Marko

Пожалуйста, посетите следующую ссылку:

https://github.com/mikepenz/MaterialDrawer

https://github.com/mikepenz/MaterialDrawer/issues/487

MaterialDrawer - это реализация для создания ящика материала. Его последняя версия 4.0, хотя еще не выпущена, предоставляет «встроенный ящик», чтобы достичь того, что вы хотите. До сегодняшнего дня не был идеальным, потому что я скачал его демо, попробовал эту новую функцию и обнаружил, что ящик не открывается при скольжении, но автор усердно работает над его завершением.

В результате вы можете дождаться скорого релиза и проверить его использование в это время.

4
ywwynm

Проверьте этот другой вариант мини-навигации: Внедрение Gmail Tablet, как Navigation Drawer

Кажется, у него есть рабочее решение для варианта Mini Nav Box, как это было в приложении Gmail для планшетов, как упоминал @Amol Gupta. Принятый ответ на другой вопрос содержит ссылку на сообщение в блоге с более подробным объяснением того, как реализовать мини-вариант. Их решение использует макет скользящей панели, который переходит между «частичным» макетом и «полным» макетом.

Вот ссылка на пример источника поста в блоге:

https://github.com/chiuki/sliding-pane-layout

2
dpremier89

Я рекомендую изменить layout_width of @id/left_drawer с 240dp на меньшее число, например 80dp.

0
eddie