Intereting Posts
Проблемы с буферизацией с помощью android.media.MediaPlayer Android Studio – Gradle 1.5 – опция -core-library Java.net.SocketException: разрешение запрещено для android Каков самый простой и надежный способ получить текущее местоположение пользователя на Android? Всплывающие меню Android 9patch для большого количества ресурсов без потери качества Почему стиль и макет не используют пространство имен android? КоординаторLayout оставляет пустое место внизу после прокрутки Значок Android уведомления большой, есть ли способ удалить значок меньшего размера в правом нижнем углу? Что такое InstallerPackageName, когда приложение находится в фазе «ожидающей публикации» и используется / проверено рецензентами / тестировщиками (Google Play Store)? Что такое «прерывание слайдера» на Android Анимация фрагментации: слайд и слайд Невозможно преобразовать файл android.support.v4.app.Fragment в android.app.Fragment Портирование Trickle на Android Заголовок панели действий с несколькими строками?

Android устанавливает список навигационных ящиков, чтобы открыть точную половину экрана для всего экрана устройства.

Я хочу открыть список ярлыков на половину экрана для всех разных устройств. Я пробовал жестко закодированные значения для layout_margineleft 200dp или 100dp в список drawerlist. Но он не работает во всех устройствах, отличных от устройства к устройству. Так как я могу поддерживать ровно половину экрана для списка drawerlist. Я также пробовал различные функции, такие как setLeft (int) и т. Д., Но некоторые из них не работают из-за использования минимальной версии 8. Поэтому, пожалуйста, помогите мне. заранее спасибо.

mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout); mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist); 

Xml для этого:

 <?xml version="1.0" encoding="utf-8"?> <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" android:background="@color/setting_background" > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_margin="@dimen/top_news_linear_margin" android:background="@color/news_list_divider_color" android:orientation="vertical" android:padding="@dimen/top_news_linear_padding" > </RelativeLayout> <ListView android:id="@+id/drawer_list" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="right" android:layout_alignParentTop="true" android:background="@color/setting_background" android:cacheColorHint="@android:color/transparent" android:choiceMode="singleChoice" android:divider="@color/news_list_divider_color" android:dividerHeight="@dimen/news_list_divider_height" /> </android.support.v4.widget.DrawerLayout> 

Solutions Collecting From Web of "Android устанавливает список навигационных ящиков, чтобы открыть точную половину экрана для всего экрана устройства."

Задайте ширину для ListView динамически …

  mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout); mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist); int width = getResources().getDisplayMetrics().widthPixels/2; DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerList.getLayoutParams(); params.width = width; mDrawerList.setLayoutParams(params); 

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

Используя этот код, вы можете получить ширину экрана и высоту экрана

 DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels; 

Теперь вам нужно разделить ширину на 2

 int newWidth=width/2; 

Теперь установите ширину в ListView следующим образом:

 drawer_list.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,newWidth)); 

Это будет работать на всех устройствах и даст одинаковый размер всем.

Используя новую библиотеку дизайна поддержки Android, вы можете использовать android.support.percent.PercentRelativeLayout чтобы выполнить это легко. Вот мое решение.

 <?xml version="1.0" encoding="utf-8"?> <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:layout_marginRight="-64dp" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginRight="64dp"/> <android.support.percent.PercentRelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" > <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:fitsSystemWindows="true" app:layout_widthPercent="50%" app:headerLayout="@layout/nav_header_dashboard" app:menu="@menu/menu_drawer_activity_dashboard"/> </android.support.percent.PercentRelativeLayout> </android.support.v4.widget.DrawerLayout> 

Если вы спрашиваете, почему есть android:layout_marginRight="-64dp" и android:layout_marginRight="-64dp" в DrawerLayout и содержании. Это связано с фиксированным запасом 64 дп, который кодируется непосредственно в DrawerLayout , что не позволит вам использовать полный widtt ящика. Подробнее об этом здесь

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

Здесь я использую правый навигационный ящик, и я показываю 15% экрана дома, когда ящик перемещается влево.

  // convert your offset percent (here 15% ) into decimal by dividing 100 float offset = .15f * getResources().getDisplayMetrics().widthPixels ; float width = getResources().getDisplayMetrics().widthPixels - offset; DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) rightNavigationView.getLayoutParams(); params.width = (int) width; rightNavigationView.setLayoutParams(params); 
  int currentVerion = Build.VERSION.SDK_INT; int width= 0; Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); if(currentVerion >= Build.VERSION_CODES.BASE) { display.getSize(size); width = size.x; } else { width = display.getWidth(); } ((ListView) view.findViewById(R.id.top_sectionlist)).getLayoutParams().width =width/2;