Ящик навигации в android не полный экран

Поскольку Google представил навигационный ящик, я попытался использовать этот компонент, чтобы создать меню в стиле facebook. Проблема заключается в том, что визуальный эффект кажется другим.

В google есть панель действий, когда ящик открыт, а в facebook – нет. Вместо этого весь экран нажат на правую сторону

Я обнаружил, что некоторые lib могут достичь этого, но поскольку я предпочитаю не включать сторонний lib в проект, есть ли способ достичь этого? благодаря

Google:

facebook:

Код, основанный на учебнике навигационного ящика

protected void setupMenu(List<String> list, final ListView menu) { Adapter customAdapter = new Adapter(getActionBar().getThemedContext(), R.layout.item, list); menu.setAdapter(customAdapter); menu.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, 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() { @Override 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); } }); } 

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

Если вы проверите исходный код DrawerLayout, вы увидите, что resposnible для этого минимального поля является переменной mMinDrawerMargin

Итак, есть по крайней мере 2 решения (трюки). 1. вытяните DrawerLayout и установите эту переменную в 0 с отражением. Вызовите этот метод из всех конструкторов.

 private void init() { try { Field declaredField = getClass().getSuperclass().getDeclaredField("mMinDrawerMargin"); declaredField.setAccessible(true); declaredField.setInt(declaredField, 0); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 
  1. Не так сложно

Метод overryde onMeasure, подобный этому

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

Я также создал образец проекта здесь https://bitbucket.org/wnc_21/fsnavigationdrawer

Вот быстрое решение, которое сработало для меня:

 <include android:id="@+id/left_drawer" android:orientation="vertical" **android:layout_width="320dp"** android:layout_height="match_parent" android:layout_gravity="start" layout="@layout/drawer"/> 

Установите ширину включенного макета. Для устройств с разным размером экрана вы можете динамически устанавливать ширину этого включенного макета.

Всего наилучшего !!!!

Эта проблема вызвана маржей, поэтому нам нужно сбросить ширину: я решил эту проблему, выполнив DrawerListener и обернув ListView внутри LinearLayout для создания комнат для других видов рядом с представлением списка

Вот мой слушатель

 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; } @Override public void onDrawerSlide(View drawerView, float slideOffset) { if (!expanded) { Log.i("margin", "here we are"); LinearLayout layout = (LinearLayout) findViewById(R.id.left_drawer); layout.getLayoutParams().width = getResources().getDisplayMetrics().widthPixels; layout.requestLayout(); expanded = true; } } @Override public void onDrawerOpened(View drawerView) { } @Override public void onDrawerClosed(View drawerView) { } @Override public void onDrawerStateChanged(int newState) { } } 

Вот мой макет:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/application_drawer_layout" android:layout_width="fill_parent" android:layout_height="match_parent" android:background="#ffffff"> <FrameLayout android:id="@+id/application_content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/left_drawer" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="start" android:background="#000000" android:orientation="vertical"> <ListView android:id="@+id/application_left_drawer" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

Если вы хотите реализовать как скользящее меню facebook, тогда вы должны использовать андроиды SlidingPaneLayout вместо NavigationDrawer.

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

Добавьте панель инструментов вместо панели действий и не применяйте тему панели действий.

Intereting Posts
Как узнать, активировал ли пользователь параметр доступности «большего шрифта» в андроиде? «Пространство имен не связано» в файле ресурсов xml при проверке кода в Android Studio Функция Cloud Firebase запускает дважды onUpdate Принести активность перед всем запущенным приложением Отправьте ссылку на группу whatsapp непосредственно из браузера (или из приложения) Как я могу получить права root через Android SDK? Флейтовая интеграция с Android-приложением дает ошибку «Не удалось найти класс com.flurry.sdk.i», на который ссылается метод com.flurry.sdk.hu.a " Подробное объяснение профиля из «adb shell dumpsys meminfo my-app-name»? Как проверить, существует ли уже существующее значение в базе данных sqlite для Android? Уточнение setUpdateCurrent на OneOffTask Вызов setCompoundDrawables () не отображает Compound Drawable Можем ли мы использовать System IPC в коде Android NDK Android – Ошибка FragmentTabHost "Нет вкладки, известной для тега null" Вызывается onResume () перед onActivityResult ()? Android: неправильный onMeasure – много вызовов