J'utilise le BottomAppBar
de Google comme ceci:
<com.google.android.material.bottomappbar.BottomAppBar android:id="@+id/vNavigationBar" android:layout_width="match_parent" android:layout_height="wrap_content">
La barre inférieure personnalisée est plate et je dois ajouter des coins arrondis sur la barre inférieure (image exemple ci-dessous)
Que dois-je faire pour que cela fonctionne de cette façon?
3 Réponses :
vous pouvez essayer d'ajouter un fichier xml de forme dessinable et y ajouter le code suivant
<corners android:topLeftRadius="16dp" android:topRightRadius="16dp" />
Et puis définir l'arrière-plan de BottomAppBar sur le dessinable
selon ceci , vous pouvez créer votre classe customView étendue à partir de BottomAppBar et implémenter ce code:
mPath = new Path(); mPaint = new Paint(); mPaint.setStyle(Paint.Style.FILL_AND_STROKE); mPaint.setColor(Color.WHITE); setBackgroundColor(Color.TRANSPARENT);
`
rappelez-vous juste dans chaque constructeur de votre classe personnalisée, faites ceci:
`@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mNavigationBarWidth = getWidth(); mNavigationBarHeight = getHeight(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPath.reset(); mPath = RoundedRect(0, 0, mNavigationBarWidth, mNavigationBarHeight, 50, 50, true); canvas.drawPath(mPath, mPaint); }
Le BottomAppBar fonctionne avec un MaterialShapeDrawable
et vous pouvez lui appliquer des coins arrondis (en utilisant un RoundedCornerTreatment
).
Dans votre mise en page :
<com.google.android.material.bottomappbar.BottomAppBar android:id="@+id/bottomAppBar" app:fabAlignmentMode="center" app:fabCradleVerticalOffset="8dp" app:fabCradleMargin="8dp" .../>
Ensuite dans le code définissez:
//Corner radius float radius = getResources().getDimension(R.dimen.default_corner_radius); BottomAppBar bottomAppBar = findViewById(R.id.bottom_app_bar); MaterialShapeDrawable bottomBarBackground = (MaterialShapeDrawable) bottomAppBar.getBackground(); bottomBarBackground.setShapeAppearanceModel( bottomBarBackground.getShapeAppearanceModel() .toBuilder() .setTopRightCorner(CornerFamily.ROUNDED,radius) .setTopLeftCorner(CornerFamily.ROUNDED,radius) .build());
Cela fonctionne aussi avec un fabCradle
:
<com.google.android.material.bottomappbar.BottomAppBar android:id="@+id/bottom_app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:backgroundTint="@color/..." ../>
Il nécessite la version 1.1.0
ne fonctionne pas. code>
@AkshayRaj. Votre code fonctionne , juste essayé. Mais 16f! = 16dp
.
@AkshayRaj. J'ai mis à jour la réponse. Le BottomAppBar
fournit un MaterialShapeDrawable
. Il suffit de lui appliquer les coins arrondis en changeant le ShapeAppearanceModel
Cette réponse est correcte si vous ciblez Android L
Je recommande fortement de ne pas faire ce que vous avez en tête, car cela va à l'encontre des directives de conception matérielle: material.io/design/components/app-bars-bottom.html#