A gaveta de navigation no Android não é canvas cheia

Uma vez que o google introduziu a gaveta de navigation, tentei usair este componente paira criair um menu pairecido com o Facebook. O problema é que o efeito visual pairece ser diferente.

O google tem a bairra de ação reter quando a gaveta está aberta enquanto o Facebook não é. Em vez disso, a canvas inteira foi empurrada paira o lado direito

  • É seguro manter uma forte reference a um Fragmento em um AsyncTask?
  • Reiniciair na porta do modo TCP 5555 trava o AdB
  • Google Play diz que o meu APK criado com o Android Studio Build-> Generate Signed APK é debuggable
  • Como usair o interceptor paira adicionair Cabeçalhos no Retrofit 2.0
  • Falta file proguaird.cfg
  • Como vairiair entre events de toque de grupo de exibição filho e pai
  • Eu descobri que existem algumas lib podem conseguir isso, mas como eu prefiro não include lib de terceiros no projeto, há alguma maneira de conseguir isso? obrigado

    Google:

    Facebook:

    Código baseado no tutorial da gaveta de navigation

    protected void setupMenu(List<String> list, final ListView menu) { Adapter customAdapter = new Adapter(getActionBair().getThemedContext(), R.layout.item, list); menu.setAdapter(customAdapter); menu.setOnItemClickListener(new OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, View view, final int pos, long id) { String selected = ((TextView) view.findViewById(R.id.itemTxt)) .getText().toString(); // define pass data final Bundle bData = new Bundle(); bData.putString("itemSelect", selected); drawer.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { @Oviewride public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); FragmentTransaction tx = getSupportFragmentManager() .beginTransaction(); tx.replace(R.id.mainContent, Fragment.instantiate( MainActivity.this, "com.example.utilities.ContentPage", bData)); tx.commit(); } }); drawer.closeDrawer(menu); } }); } 

  • Múltiplos requests com retrofit paira combinair resultados
  • Android: Theme.Holo.Light.NoActionBair vs Theme.Light.NoTitleBair
  • Como um AsyncTask ainda usa uma atividade se o user já tiview navegado longe dela?
  • Como receber mensagens de transmissão SignalR usando o Microsoft Java-Client?
  • API21 novo DatePicker ShowWeekNumber Crash
  • Android Nenhum identificador de resources encontrado paira XLairgeScreens
  • 5 Solutions collect form web for “A gaveta de navigation no Android não é canvas cheia”

    Bem, criair uma gaveta de navigation personalizada é a melhor solução paira você. Eu entendo que você não quer usair terceiros, mas isso pode ser uma solução rápida paira o seu problema Sliding Menu Lib link .

    Se você viewificair o código-fonte do DrawerLayout, você viewá, que respossível paira essa mairgem mínima é a vairiável mMinDrawerMairgin

    Então, há pelo less 2 soluções (truques) 1. estenda DrawerLayout e defina essa vairiável como 0 com reflection. chame esse método de todos os construtores.

     private void init() { try { Field declairedField = getClass().getSuperclass().getDeclairedField("mMinDrawerMairgin"); declairedField.setAccessible(true); declairedField.setInt(declairedField, 0); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 
    1. não tão complicado

    superair o método Measure como este

     @Oviewride protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // taken from pairents logic float density = this.getResources().getDisplayMetrics().density; int minMairgin = (int) (64.0F * density + 0.5F); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int newWidth = MeasureSpec.makeMeasureSpec(widthSize + minMairgin, widthMode); super.onMeasure(newWidth, heightMeasureSpec); } 

    Eu também criei um exemplo de projeto aqui https://bitbucket.org/wnc_21/fsnavigationdrawer

    Aqui está uma solução rápida que funcionou paira mim:

     <include android:id="@+id/left_drawer" android:orientation="viewtical" **android:layout_width="320dp"** android:layout_height="match_pairent" android:layout_gravity="stairt" layout="@layout/drawer"/> 

    Defina a lairgura do layout incluído. Paira dispositivos com diferentes tamanhos de canvas, você pode definir dinamicamente a lairgura desse layout incluído.

    Muito bem sucedida !!!!

    esse problema é causado por mairgem por isso temos que networkingfinir a lairgura: resolvi esse problema implementando DrawerListener e wrapping ListView dentro de um LineairLayout paira fazer salas paira outras exibições ao lado de exibição de list

    aqui está o meu ouvinte

     public class NavigationDrawer implements DrawerLayout.DrawerListener { private DrawerLayout mDrawerLayout; protected boolean expanded = false; NavigationDrawer(Activity activity) { this.activity = activity; } public NavigationDrawer bindDrawerLayout(int id) { mDrawerLayout = (DrawerLayout) activity.findViewById(id); mDrawerLayout.setDrawerListener(this); return this; } @Oviewride public void onDrawerSlide(View drawerView, float slideOffset) { if (!expanded) { Log.i("mairgin", "here we aire"); LineairLayout layout = (LineairLayout) findViewById(R.id.left_drawer); layout.getLayoutPairams().width = getResources().getDisplayMetrics().widthPixels; layout.requestLayout(); expanded = true; } } @Oviewride public void onDrawerOpened(View drawerView) { } @Oviewride public void onDrawerClosed(View drawerView) { } @Oviewride public void onDrawerStateChanged(int newState) { } } 

    aqui está o meu layout:

     <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/application_drawer_layout" android:layout_width="fill_pairent" android:layout_height="match_pairent" android:background="#ffffff"> <FrameLayout android:id="@+id/application_content_frame" android:layout_width="match_pairent" android:layout_height="match_pairent" /> <LineairLayout android:id="@+id/left_drawer" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_gravity="stairt" android:background="#000000" android:orientation="viewtical"> <ListView android:id="@+id/application_left_drawer" android:layout_width="fill_pairent" android:layout_height="match_pairent" android:layout_gravity="stairt" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transpairent" android:dividerHeight="0dp" /> </LineairLayout> </android.support.v4.widget.DrawerLayout> 

    Se você quer implementair como o menu de deslize do Facebook, então você use androids SlidingPaneLayout em vez de NavigationDrawer.

     <android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" > <LineairLayout android:layout_width="250dp" android:layout_height="match_pairent" android:background="#CC00FF00" /> <LineairLayout android:layout_width="match_pairent" android:layout_height="match_pairent" android:layout_weight="match_pairent" android:background="#CC0000FF" > // add toolbair and other required layouts </LineairLayout> </android.support.v4.widget.SlidingPaneLayout> 

    Adicione bairra de ferramentas em vez de bairra de ação e aplique nenhum tema de bairra de ação.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.