Как создать пользовательский навигационный ящик в android

Привет, Я пытаюсь создать навигационный ящик, похожий на gmail app navigation drawer. Я следую за сайтом разработчика, но он указывает только на базовую реализацию. Но мне нужно настроить навигацию в соответствии с моими спецификациями.

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

Как я могу это сделать?

Учебник Android Custom Navigation Drawer (через archive.org) содержит базовый и настраиваемый проект. Последний показывает, как настроить навигационный ящик, как показано на скриншоте:

NavigationDrawerCustom

Исходный код проектов (через archive.org) доступен для загрузки.


Это также проект Navigation Drawer – Live-O …

Навигационный ящик - Live-O

Исходный код проекта доступен на GitHub.


Библиотека MaterialDrawer предназначена для обеспечения максимально простой реализации навигационного ящика для вашего приложения. Он обеспечивает большое количество настроек в ящике, а также включает простой в использовании заголовок, который можно использовать как AccountSwitcher.

Демоверсия библиотеки MaterialDrawer


Обратите внимание: Android Studio тем временем имеет проект шаблона для создания активности навигационного ящика, как показано на скриншоте.

Активность навигационного ящика

Этот repository отслеживает изменения, внесенные в шаблон.

Я использовал ниже макет и смог выполнить пользовательский макет в режиме навигации.

      

Для меня было проще:

Соображения:

  • Для этого решения требуется автономная активность навигационного ящика, предоставляемая Android Studio.
  • Классы DrawerItem , CustomDrawerAdapter и layout custom_drawer_item.xml были взяты из этого руководства .

1. Создайте этот class для упаковки пользовательского элемента ящика:

 public class DrawerItem { String ItemName; int imgResID; public DrawerItem(String itemName, int imgResID) { super(); ItemName = itemName; this.imgResID = imgResID; } public String getItemName() { return ItemName; } public void setItemName(String itemName) { ItemName = itemName; } public int getImgResID() { return imgResID; } public void setImgResID(int imgResID) { this.imgResID = imgResID; } } 

2. Создайте пользовательский макет (custom_drawer_item.xml) для элементов вашего ящика:

           1           1           1           

3. Создайте свой пользовательский адаптер:

 import java.util.List; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class CustomDrawerAdapter extends ArrayAdapter { Context context; List drawerItemList; int layoutResID; public CustomDrawerAdapter(Context context, int layoutResourceID, List listItems) { super(context, layoutResourceID, listItems); this.context = context; this.drawerItemList = listItems; this.layoutResID = layoutResourceID; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub DrawerItemHolder drawerHolder; View view = convertView; if (view == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); drawerHolder = new DrawerItemHolder(); view = inflater.inflate(layoutResID, parent, false); drawerHolder.ItemName = (TextView)view.findViewById(R.id.drawer_itemName); drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon); view.setTag(drawerHolder); } else { drawerHolder = (DrawerItemHolder) view.getTag(); } DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position); drawerHolder.icon.setImageDrawable(view.getResources().getDrawable( dItem.getImgResID())); drawerHolder.ItemName.setText(dItem.getItemName()); return view; } private static class DrawerItemHolder { TextView ItemName; ImageView icon; } } 

4. В автогенерированном classе NavigationDrawerFragment onCreateView замените для этого автогенерированный адаптер:

 ArrayList dataList = new ArrayList(); dataList.add(new DrawerItem(getString(R.string.title_section1), R.drawable.ic_action_1)); dataList.add(new DrawerItem(getString(R.string.title_section2), R.drawable.ic_action_2)); dataList.add(new DrawerItem(getString(R.string.title_section3), R.drawable.ic_action_3)); mDrawerListView.setAdapter(new CustomDrawerAdapter( getActivity(), R.layout.custom_drawer_item, dataList)); 

Помните, замените R.string.title_sectionN и R.drawable.ic_action_N для своих собственных ресурсов.

Вы можете легко настроить Android-навигатор, как только вы знаете, как его реализовать. вот хороший учебник, в котором вы можете настроить его.

Это будет структура вашего mainXML:

       1       

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

Android Navigation Drawer с использованием Activity Я только что последовал примеру: http://antonioleiva.com/navigation-view/

Вам просто нужно несколько настроек:

 public class MainActivity extends AppCompatActivity { public static final String AVATAR_URL = "http://lorempixel.com/200/200/people/1/"; private DrawerLayout drawerLayout; private View content; private Toolbar toolbar; private NavigationView navigationView; private ActionBarDrawerToggle drawerToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); toolbar = (Toolbar) findViewById(R.id.toolbar); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); initToolbar(); setupDrawerLayout(); content = findViewById(R.id.content); drawerToggle = setupDrawerToggle(); final ImageView avatar = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.avatar); Picasso.with(this).load(AVATAR_URL).transform(new CircleTransform()).into(avatar); } private void initToolbar() { final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp); actionBar.setDisplayHomeAsUpEnabled(true); } } private ActionBarDrawerToggle setupDrawerToggle() { return new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Pass any configuration change to the drawer toggles drawerToggle.onConfigurationChanged(newConfig); } private void setupDrawerLayout() { drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navigationView = (NavigationView) findViewById(R.id.navigation_view); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { int id = menuItem.getItemId(); switch (id) { case R.id.drawer_home: Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); finish(); break; case R.id.drawer_favorite: Intent j = new Intent(getApplicationContext(), SecondActivity.class); startActivity(j); finish(); break; } return true; } }); 

} Вот макет xml

        

Добавить drawer.xml в меню

     ...   

Чтобы открыть и закрыть ящик, добавьте эти значения в string.xml

 Open Close 

drawer.xml

 enter code here 

    

Мне нужно добавить заголовок для категоризации элемента списка в Drawer

Настройте listView или используйте expandableListView

Мне нужен переключатель, чтобы выбрать некоторые из моих опций

Вы можете сделать это, не изменяя текущую реализацию NavigationDrawer , вам просто нужно создать собственный адаптер для вашего listView . Вы можете добавить родительский макет как Drawer тогда вы можете делать любые сложные макеты внутри этого как обычно.

Если вы используете Android Studio он предоставляет очень простой инструмент для создания Activity с помощью навигационного ящика.

Щелкните правой кнопкой мыши на своем пакете, перейдите в New | Activity | Navigation Drawer Activity New | Activity | Navigation Drawer Activity

введите описание изображения здесь

Вы можете назвать эту BaseActivity так, чтобы всякая деятельность, которую вы хотите иметь ящик для навигации, просто расширила ее (при условии, что активность еще не расширяет другой class). Чтобы расширить деятельность, см. Это .

если вы запустите приложение, это то, что вы получаете:

введите описание изображения здесь

Отсюда все, что вам нужно, чтобы настроить элементы в ящике и добавить контент в main content view следуйте официальной документации или по вашему выбору.

Давайте будем гением компьютера.