J'ai donc créé une feuille de fond persistante dans une mise en page de coordinateur. Je peux régler la hauteur de LinearLayout à une valeur 500dp Mais ce que je veux, c'est régler sa hauteur à la moitié de l'écran. Je pense que je dois obtenir la hauteur de l'écran via DisplayMetrics et l'appliquer d'une manière ou d'une autre sur LinearLayout
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
tools:context=".post.PostActivity">
<LinearLayout
android:id="@+id/gallery_bottom_sheet"
android:layout_width="match_parent"
android:layout_height="500dp"
android:layout_marginHorizontal="@dimen/margin_very_small"
android:background="@drawable/background_sheet"
android:orientation="vertical"
app:behavior_peekHeight="@dimen/peek_height"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<View
android:layout_width="@dimen/width_forty"
android:layout_height="@dimen/divider_large"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/margin_small"
android:layout_marginBottom="@dimen/margin_small"
android:background="?android:listDivider" />
<GridView
android:id="@+id/gallery_grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:horizontalSpacing="@dimen/grid_spacing"
android:nestedScrollingEnabled="true"
android:numColumns="4"
android:verticalSpacing="@dimen/grid_spacing" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
3 Réponses :
DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int height = displayMetrics.heightPixels; int requiredHeight = height/2; LinearLayout linearLayout = findViewById(R.id.gallery_bottom_sheet); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, requiredHeight); linearLayout.setLayoutParams(layoutParams); Just copy paste the above code inside your java file.
Cela lève une exception déjà répondu dans le commentaire java.lang.ClassCastException: android.widget.LinearLayout $ LayoutParams ne peut pas être converti en androidx.coordinatorlayout.widget.CoordinatorLayout $ LayoutPa rams
Essayez ceci: LayoutParams layoutParams = new LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, requiredHeight);
Quelle est la différence entre ceci et ci-dessus?
Vous utilisez probablement une ancienne version d'Android Studio.
Android Studio 3.6.3 Build # AI-192.7142.36.36.6392135, construit le 14 avril 2020 Version d'exécution: 1.8.0_212-release-1586-b04 VM amd64: VM serveur OpenJDK 64 bits par JetBrains sro Windows 8.1 6.3 GC: ParNew, ConcurrentMarkSweep Mémoire: 2014M Coeurs: 4 Registre: ide.new.welcome.screen.force = true Plugins non fournis: com.google.services.firebase
DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); LinearLayout linearLayout = findViewById(R.id.gallery_bottom_sheet); LayoutParams params = layout.getLayoutParams(); params.height = (int) displayMetrics.heightPixels/2; linearLayout.setLayoutParams(params); Just copy paste the above code to your java file, inside "onCreate" method.
Commencez par calculer la hauteur d'écran requise via DisplayMetrics
LinearLayout linearLayout = findViewById(R.id.gallery_bottom_sheet); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) linearLayout.getLayoutParams(); params.height = halfScreenHeight; linearLayout.setLayoutParams(params);
Ensuite, obtenez le getLayoutParams () du linearLayout CoordinatorLayout.LayoutParams )
DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int halfScreenHeight = displayMetrics.heightPixels / 2;