Je veux ouvrir la liste des tiroirs à la moitié de l'écran pour tous les appareils. J'ai essayé des valeurs codées en dur pour layout_margineleft 200dp ou 100dp dans la liste des tiroirs. mais cela ne fonctionne pas dans tous les appareils, il diffère d'un appareil à l'autre. Alors, comment puis-je maintenir exactement la moitié de l'écran pour tiroirlist. J'ai aussi essayé diverses fonctions comme setLeft (int), etc.mais certaines d'entre elles ne fonctionnent pas car j'utilise la version 8 minimum. Merci d'avance.
mDrawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout);
mDrawerList = (ListView) view.findViewById(R.id.top_sectionlist);
xML pour cela:
<?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>
définir la largeur pour ListView dynamiquement ...
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);
Vous devez calculer manuellement la taille de l'écran et définir la largeur dynamique à la disposition du tiroir au moment de l'exécution. Voici comment obtenir la largeur et la hauteur de l'écran du périphérique au moment de l'exécution
En utilisant ce code, vous pouvez obtenir la largeur et la hauteur de l'affichage du runtime
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
Maintenant, vous devez diviser la largeur par 2
int newWidth=width/2;
Maintenant, réglez la largeur sur ListView comme ceci
drawer_list.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,newWidth));
Cela fonctionnera pour tous les appareils et donnera une taille uniforme à tous.
voici ma solution pour ceux qui ont besoin de plusieurs pourcentages pour afficher leur tiroir de navigation.
Ici, j'utilise le tiroir de navigation de droite et affiche 15% de l'écran d'accueil lorsque le tiroir se déplace vers la gauche.
// 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);
À l'aide de la nouvelle bibliothèque de support technique Android, vous pouvez utiliser le Android.support.percent.PercentRelativeLayout
pour accomplir cela facilement. Voici ma solution.
<?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 vous vous demandez pourquoi il y a un Android:layout_marginRight="-64dp"
et un Android:layout_marginRight="-64dp"
dans le DrawerLayout
et le contenu. C’est en raison de la marge fixe de 64 dp codée directement dans DrawerLayout
qui ne vous permet pas d’utiliser toute la largeur du tiroir. Plus à ce sujet ici
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;