versículo versiculo señor salmo reflexion que nvi hizo explicacion este android screen navigation-drawer margins

android - versiculo - salmo 118 versículo 6



Android establece la lista de cajones de navegación para abrir la mitad exacta de la pantalla para todas las pantallas del dispositivo (5)

Quiero abrir la lista de cajones en la mitad de la pantalla para todos los dispositivos diferentes. Intenté los valores codificados para layout_margineleft 200dp o 100dp a la lista de dibujo. pero no funciona en todos los dispositivos, es diferente de un dispositivo a otro. Entonces, ¿cómo puedo mantener exactamente la mitad de la pantalla para la lista de cajones? También probé varias funciones como setLeft (int), etc. pero algunas de ellas no funcionan debido a que uso la versión mínima 8. Así que, por favor, ayúdenme. gracias por adelantado.

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

xml para eso:

<?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>


Aquí está mi solución para otros que necesitan varios porcentajes para mostrar el cajón de navegación.

Aquí, uso el cajón de navegación derecho y muestro el 15% de la pantalla de inicio cuando el cajón se mueve a la izquierda.

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


Debe calcular manualmente el tamaño de la pantalla y configurar el ancho dinámico para el diseño del cajón en el tiempo de ejecución. A continuación le indicamos cómo obtener el ancho y la altura de la pantalla del dispositivo en el tiempo de ejecución.

Usando este código, puede obtener el ancho y la altura de la pantalla en tiempo de ejecución

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

Ahora, necesitas dividir el ancho por 2

int newWidth=width/2;

Ahora establece el ancho a ListView como este

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

Esto funcionará para todos los dispositivos y dará un tamaño uniforme a todos.


Usando la nueva biblioteca de diseño de soporte de Android, puede hacer uso de android.support.percent.PercentRelativeLayout para lograr esto fácilmente. Aquí está mi solución.

<?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>

Si estás preguntando por qué hay un android:layout_marginRight="-64dp" y android:layout_marginRight="-64dp" en DrawerLayout y el contenido. Es debido al margen fijo de 64 dp que está codificado directamente en DrawerLayout que no le permitiría usar un ancho completo del cajón. Más sobre eso here


establecer el ancho para ListView dinámicamente ...

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


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;