Come creare un cassetto di navigazione personalizzato in android

Ciao, sto cercando di creare un cassetto di navigazione simile al cassetto di navigazione app Gmail. Segue il sito degli sviluppatori, ma solo per l'implementazione di base. Ma devo personalizzare la navigazione secondo le mie specifiche.

  1. Devo aggiungere un'intestazione per classificare l'elemento di elenco nel cassetto
  2. Ho bisogno di un button radio per select alcune delle mie opzioni

Come posso fare questo?

  • Idee per il sistema di storage mobile java criptato multipiattaforma
  • "Break on Exception" in Eclipse / Android
  • Come modificare il colore del bordo (non focalizzato) di un EditText?
  • sensore yamaha MS-3C sulla galassia samsung
  • Timeout nella class Android DefaultHttpClient Class
  • Crea il nome di punto di accesso di networking con il codice,
  • java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset ()
  • Rendere trasparente la barra degli strumenti
  • Messa a punto del context di errore di creazione di IntelliJ
  • Errore del server interno con richieste POST
  • Android ottiene la data prima di 7 giorni (una settimana)
  • Come determinare se la mia applicazione è in esecuzione su Android
  • 8 Solutions collect form web for “Come creare un cassetto di navigazione personalizzato in android”

    Il cassetto di navigazione personalizzato Android di tutorial contiene un progetto base e un progetto personalizzato . Quest'ultima mostra come impostare un cassetto di navigazione come mostrato nello screenshot:

    NavigationDrawerCustom

    Il codice sorgente dei progetti è disponibile per il download.


    Il progetto è anche il progetto di Live-O …

    Cassetto di navigazione - Live-O

    Il codice sorgente del progetto è disponibile su GitHub.


    La libreria MaterialDrawer mira a fornire la più semplice implementazione di un cassetto di navigazione per l'applicazione. Fornisce una grande quantità di personalizzazioni della casella e include anche un'intestazione di facile utilizzo che può essere utilizzata come AccountSwitcher.

    Demo della libreria di MaterialDrawer


    Tieni presente che Android Studio ha intanto un progetto di model per creare un'attività di cassetta di navigazione come mostrato nello screenshot.

    Attività del cassetto di navigazione

    Questo repository tiene traccia delle modifiche apportte al model.

    La soluzione più facile per me era:

    considerazioni:

    • Questa soluzione richiede l'attività di cassetta di navigazione autogenerata fornita da Android Studio.
    • Le classi DrawerItem , CustomDrawerAdapter e il layout custom_drawer_item.xml sono state prese da questo tutorial .

    1. Creare questa class per avvolgere l'elemento del cassetto personalizzato:

     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. Crea un layout personalizzato (custom_drawer_item.xml) per i tuoi elementi del cassetto:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/itemLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:orientation="vertical" android:layout_marginTop="0dp" android:background="?android:attr/activatedBackgroundIndicator"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="55dp"> <ImageView android:id="@+id/drawer_icon" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/drawer_itemName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginBottom="1dp" android:layout_marginTop="1dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:background="#DADADC"> </View> </LinearLayout> </RelativeLayout> 

    3. Crea l'adattatore personalizzato:

     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<DrawerItem> { Context context; List<DrawerItem> drawerItemList; int layoutResID; public CustomDrawerAdapter(Context context, int layoutResourceID, List<DrawerItem> 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. Nel metodo onCreateView class onCreateView NavigationDrawerFragment , sostituire la scheda autogenerata per questo:

     ArrayList<DrawerItem> dataList = new ArrayList<DrawerItem>(); 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)); 

    Ricorda di sostituire R.string.title_sectionN e R.drawable.ic_action_N per le proprie risorse.

    Ho usato sotto il layout e in grado di get un layout personalizzato in Visualizzazione Navigazione.

     <android.support.design.widget.NavigationView android:id="@+id/navi_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start|top" android:background="@color/navigation_view_bg_color" app:theme="@style/NavDrawerTextStyle"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/drawer_header" /> <include layout="@layout/navigation_drawer_menu" /> </LinearLayout> </android.support.design.widget.NavigationView> 

    È ansible personalizzare facilmente il cassetto di navigazione android quando sapete come è stata implementata. qui è un bel tutorial where è ansible impostarlo.

    Questa sarà la struttura del vostro mainXML:

     <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"> <!-- Framelayout to display Fragments --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- Listview to display slider menu --> <ListView android:id="@+id/list_slidermenu" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="right" android:choiceMode="singleChoice" android:divider="@color/list_divider" android:dividerHeight="1dp" android:listSelector="@drawable/list_selector" android:background="@color/list_background"/> </android.support.v4.widget.DrawerLayout> 

    Puoi personalizzare questa list di liste a tuo piacimento aggiungendo l'intestazione. E radio pulsanti.

    Devo aggiungere un'intestazione per classificare l'elemento di elenco nel cassetto

    Personalizza il listView o utilizza expandableListView

    Ho bisogno di un button radio per select alcune delle mie opzioni

    Puoi farlo senza modificare l'attuale implementazione di NavigationDrawer , devi solo creare una scheda personalizzata per il tuo listView . È ansible aggiungere un layout genitore come Drawer quindi è ansible eseguire qualsiasi struttura complessa all'interno di questo come normale.

    Se utilizzi Android Studio , fornisce uno strumento molto semplice per creare un'attività con un cassetto di navigazione.

    Fare clic destro sul tuo pacchetto, andare a New | Activity | Navigation Drawer Activity New | Activity | Navigation Drawer Activity

    immettere qui la descrizione dell'immagine

    È ansible denominare questa BaseActivity modo che qualsiasi attività che si desidera avere un cassetto di navigazione estenderà semplicemente (supponendo che l'attività non estenda ancora un'altra class). Per estendere le attività, vedere questo .

    se si esegue l'applicazione, questo è ciò che si ottiene:

    immettere qui la descrizione dell'immagine

    Da qui, tutto quello che devi personalizzare gli elementi sul cassetto e aggiungere contenuti alla main content view è seguire la documentazione ufficiale o qualsiasi altra scelta.

    Esempio semplice cassetto di navigazione in android .

    Spero che questo blog aiuterà anche altri.

    Cassetto di navigazione Android utilizzando l'attività Ho seguito l'esempio: http://antonioleiva.com/navigation-view/

    Hai solo bisogno di pochi personalizzazioni:

     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; } }); 

    } Ecco il layout xml

     <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways|snap" /> </android.support.design.widget.AppBarLayout> </FrameLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/drawer_header" app:menu="@menu/drawer"/> 

    Aggiungere il menu drawer.xml

     <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/drawer_home" android:checked="true" android:icon="@drawable/ic_home_black_24dp" android:title="@string/home"/> <item android:id="@+id/drawer_favourite" android:icon="@drawable/ic_favorite_black_24dp" android:title="@string/favourite"/> ... <item android:id="@+id/drawer_settings" android:icon="@drawable/ic_settings_black_24dp" android:title="@string/settings"/> </group> 

    Per aprire e chiudere il cassetto, aggiungere questi valori in string.xml

     <string name="drawer_open">Open</string> <string name="drawer_close">Close</string> 

    drawer.xml

     enter code here 

     <ImageView android:id="@+id/avatar" android:layout_width="64dp" android:layout_height="64dp" android:layout_margin="@dimen/spacing_large" android:elevation="4dp" tools:src="@drawable/ic_launcher"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/email" android:layout_marginLeft="@dimen/spacing_large" android:layout_marginStart="@dimen/spacing_large" android:text="Username" android:textAppearance="@style/TextAppearance.AppCompat.Body2"/> <TextView android:id="@+id/email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginLeft="@dimen/spacing_large" android:layout_marginStart="@dimen/spacing_large" android:layout_marginBottom="@dimen/spacing_large" android:text="username@mymail.com" android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> 

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.