Реализация Android NavDrawer во всех действиях - PullRequest
0 голосов
/ 30 ноября 2018

Я создал Activity в Android Studio и выбрал макет «Навигационный ящик».Затем Android создал автоматизированный макет навигации, который имеет выдвижной ящик, который можно выдвинуть, и предоставляет мне параметры навигации.

Я отредактировал все параметры в соответствии с моей навигацией, а также отредактировал изображения.Я полностью закодировал Интенты, которые приведут пользователя к правильному действию при нажатии соответствующей опции.

Я очень новичок в этом, и мне было интересно, каков наилучший из возможных способов для меня реализовать этоОдин и тот же макет навигации на все мои действия?Я читал о базовых действиях, но я не хочу указывать свой собственный макет, так как я чувствую, что этот Android - именно то, что я ищу.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 ноября 2018

Существует два способа создания навигационного ящика, доступного на каждом экране вашего приложения.

  1. Важно отметить, что вам не обязательно создавать отдельное действие для каждого экрана, который пользователь может видеть в вашем приложении.Если вы хотите изменить только «содержимое» экрана, но оставить ту же базовую панель инструментов, панель навигации и окружающий макет «рамки», обычно лучше (и более эффективно) использовать фрагмент вместо.Таким образом, вы можете делать почти все то же самое, что вы можете делать с отдельными действиями, но вам нужно создать Навигатор только один раз, когда приложение открыто.Google теперь рекомендует создавать приложения таким образом (как вы можете видеть в в этом посте ), поскольку они лучше / более гибки в обмене данными между экранами, чем действия, среди прочих причин ...

  2. Если вы действительно хотите создать несколько действий с одним и тем же выдвижным ящиком, вам следует создать отдельный метод и файл макета специально для этого ящика, а затем внедрить их во все создаваемые вами действия.Вот общий пример (используемые представления / идентификаторы / атрибуты на самом деле не существуют, они просто существуют для демонстрации - замените их тем, что вы используете в своем приложении):

    a.Напишите отдельный файл макета, содержащий содержимое панели навигации ...

    [res / layout / layout_drawer.xml]

    <DrawerViewSomethingIdk
        android:layout_height="match_parent"
        android:layout_width="250dp">
    
        <DrawerItemThing
            android:id="@+id/drawerItemId"
            android:layout_height="24dp"
            android:layout_width="match_parent"
            android:text="This is a drawer item." />
    
    </DrawerViewSomethingIdk>
    

    b.Используйте тег <include>, чтобы добавить макет к каждому макету, который вы создаете;более конкретное объяснение того, как использовать этот тег, можно найти здесь .

    <RootLayoutView
        android:layout_height="match_parent"
        android:layout_width="match_parent">
    
        <include layout="@layout/layout_drawer"/>
    
        <!-- everything else in your activity -->
    
    </RootLayoutView>
    

    c.Напишите static метод для привязки представлений в ящике к каждому Intent, который вы хотите, чтобы они запускали.

    [NavigationDrawerUtils.java]

    public static method bindIntents(Activity activity) {
        DrawerItemThing aDrawerItemView = activity.findViewById(R.id.drawerItemId);
        aDrawerItemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // start the activity
            }
        });
    
        // ... and so on for every drawer item you create
    } 
    

    d.Вызывайте метод в каждом упражнении сразу после надувания файла макета.

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1_layout);
        NavigationDrawerUtils.bindIntents(this);
    }
    

Опция 2 будет работать, но варианты ее использования ограничены.Я настоятельно рекомендую вместо этого изучить фрагменты (вариант 1), так как заполнение вашего приложения ненужными действиями приведет только к необходимости многократного повторного использования одного и того же кода на протяжении всего проекта и сделает его невероятно трудным для обслуживания.

...