Je crée la conception ci-dessous dans Android Studio. Mais je suis resté dans la façon dont je peux ajouter de la couleur en élévation comme le montre l'image ci-dessous. Une couleur verdâtre est affichée sous chaque bouton. Je ne sais pas comment je peux y parvenir.
J'ai même défini le
android: contourSpotShadowColor
et aussi ceci
android: contourAmbientShadowColor
Mais encore, je n'ai pas réussi ce que j'essayais de réaliser.
Voici mon XML pour la mise en page au cas où vous en auriez besoin.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".views.CreateActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:elevation="5dp"
android:background="@drawable/white"
android:id="@id/rel1">
<ImageView
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_back"
android:id="@+id/backBut"
/>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:fontFamily="@font/roboto_bold"
android:text="CREATE"
android:textColor="#000"
android:textSize="20sp" />
</RelativeLayout>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_below="@id/rel1"
android:layout_marginTop="20dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
app:cardCornerRadius="15dp"
app:cardElevation="5dp"
android:id="@+id/createSingleDealBut"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_margin="5dp"
android:weightSum="1"
>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.3"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:src="@drawable/hourglass"
android:scaleType="centerInside"
android:layout_margin="20dp"
/>
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.6"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_medium"
android:layout_marginTop="20dp"
android:text="Single Deal"
android:textColor="#000"
android:textSize="18sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_medium"
android:textSize="12sp"
android:layout_marginTop="8dp"
android:text="Time sensitive exclusive deal expiring live within 24hrs or less"
/>
</LinearLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1"
>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/arrow"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OR"
android:layout_below="@id/createSingleDealBut"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true"
android:textColor="#000"
android:textSize="20sp"
android:fontFamily="@font/roboto_medium"
android:id="@+id/or"
/>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_below="@id/or"
android:layout_marginTop="20dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
app:cardCornerRadius="15dp"
app:cardElevation="5dp"
android:id="@+id/createOngoingDealBut"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_margin="5dp"
android:weightSum="1"
>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.3"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:src="@drawable/clock"
android:scaleType="centerInside"
android:layout_margin="15dp"
/>
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.6"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_medium"
android:layout_marginTop="20dp"
android:text="Ongoing Deals List"
android:textColor="#000"
android:textSize="18sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_medium"
android:textSize="12sp"
android:layout_marginTop="8dp"
android:text="Ongoing daily/weekly time specific deal specials offered to all customers. Create a Happy Hour deals menu"
/>
</LinearLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1"
>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="20dp"
android:src="@drawable/arrow"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<include layout="@layout/bottom_navigation" android:id="@+id/navigation" />
</RelativeLayout>
5 Réponses :
Selon cette réponse Le système d'élévation de Lollipop ne prend pas en charge les ombres colorées.
Mais cela peut être réalisé en utilisant Carbon . Il s'agit d'une implémentation de Material Design pour Android 4.0 et plus récent. Ce n'est pas la copie exacte de l'API et des fonctionnalités de Lollipop, c'est plutôt un fichier. implémentation personnalisée. Essayez-le.
Un exemple de la réponse ci-dessus:
<carbon.widget.LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<carbon.widget.Button
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_margin="@dimen/carbon_padding"
android:background="#ffffff"
app:carbon_cornerRadius="2dp"
app:carbon_elevation="8dp"
app:carbon_elevationShadowColor="@color/carbon_red_700"/>
Merci pour votre réponse. Mais j'évite les bibliothèques tierces de faire cela pour moi. Avez-vous une autre façon de le faire.
@MuhammadHashimShafiq jetez un œil à ce stackoverflow.com/questions/51001921/…
Vous pouvez consulter cet article pour atteindre votre objectif.
Résumé:
Créer une mise en page personnalisée:
public class ViewUtils {
public static Drawable generateBackgroundWithShadow(View view, @ColorRes int backgroundColor,
@DimenRes int cornerRadius,
@ColorRes int shadowColor,
@DimenRes int elevation,
int shadowGravity) {
float cornerRadiusValue = view.getContext().getResources().getDimension(cornerRadius);
int elevationValue = (int) view.getContext().getResources().getDimension(elevation);
int shadowColorValue = ContextCompat.getColor(view.getContext(),shadowColor);
int backgroundColorValue = ContextCompat.getColor(view.getContext(),backgroundColor);
float[] outerRadius = {cornerRadiusValue, cornerRadiusValue, cornerRadiusValue,
cornerRadiusValue, cornerRadiusValue, cornerRadiusValue, cornerRadiusValue,
cornerRadiusValue};
Paint backgroundPaint = new Paint();
backgroundPaint.setStyle(Paint.Style.FILL);
backgroundPaint.setShadowLayer(cornerRadiusValue, 0, 0, 0);
Rect shapeDrawablePadding = new Rect();
shapeDrawablePadding.left = elevationValue;
shapeDrawablePadding.right = elevationValue;
int DY;
switch (shadowGravity) {
case Gravity.CENTER:
shapeDrawablePadding.top = elevationValue;
shapeDrawablePadding.bottom = elevationValue;
DY = 0;
break;
case Gravity.TOP:
shapeDrawablePadding.top = elevationValue*2;
shapeDrawablePadding.bottom = elevationValue;
DY = -1*elevationValue/3;
break;
default:
case Gravity.BOTTOM:
shapeDrawablePadding.top = elevationValue;
shapeDrawablePadding.bottom = elevationValue*2;
DY = elevationValue/3;
break;
}
ShapeDrawable shapeDrawable = new ShapeDrawable();
shapeDrawable.setPadding(shapeDrawablePadding);
shapeDrawable.getPaint().setColor(backgroundColorValue);
shapeDrawable.getPaint().setShadowLayer(cornerRadiusValue/3, 0, DY, shadowColorValue);
view.setLayerType(LAYER_TYPE_SOFTWARE, shapeDrawable.getPaint());
shapeDrawable.setShape(new RoundRectShape(outerRadius, null, null));
LayerDrawable drawable = new LayerDrawable(new Drawable[]{shapeDrawable});
drawable.setLayerInset(0, elevationValue, elevationValue*2, elevationValue, elevationValue*2);
return drawable;
}
}
Ensuite, utilisez ceci:
public class RoundLinerLayoutNormal extends LinearLayout {
public RoundLinerLayoutNormal(Context context) {
super(context);
initBackground();
}
public RoundLinerLayoutNormal(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initBackground();
}
public RoundLinerLayoutNormal(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initBackground();
}
private void initBackground() {
setBackground(ViewUtils.generateBackgroundWithShadow(this,R.color.white,
R.dimen.radius_corner,R.color.shadowColor,R.dimen.elevation, Gravity.BOTTOM));
}
}
Vous pouvez voir cet article pour plus de détails.
Solution! Vous pouvez utiliser une forme dessinable comme arrière-plan
À quoi ressemble le résultat du code ci-dessous
dessinable / shape_rounded_background.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
<solid android:color="#17E208" />
</shape>
</item>
<item android:bottom="6dp">
<shape android:shape="rectangle">
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
<solid android:color="@android:color/white" />
</shape>
</item>
</layer-list>
Essayez ceci
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-8dp"
android:right="-8dp"
android:top="-8dp">
<shape>
<corners
android:bottomLeftRadius="35dp"
android:bottomRightRadius="35dp" />
<stroke
android:width="4dp"
android:color="#17E208" />
</shape>
</item>
</layer-list>
dessinable / test
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rel1"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@android:color/white"
android:elevation="5dp">
<ImageView
android:id="@+id/backBut"
android:layout_width="50dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_close" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="CREATE"
android:textColor="#000"
android:textSize="20sp" />
</RelativeLayout>
<android.support.v7.widget.CardView
android:id="@+id/createSingleDealBut"
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_below="@id/rel1"
android:layout_marginStart="30dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="30dp"
app:cardCornerRadius="30dp"
app:cardElevation="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/test"
android:orientation="horizontal"
android:weightSum="1">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.3">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_margin="20dp"
android:scaleType="centerInside"
android:src="@drawable/dishu" />
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.6"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Single Deal"
android:textColor="#000"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Time sensitive exclusive deal expiring live within 24hrs or less"
android:textSize="12sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
/>
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<TextView
android:id="@+id/or"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/createSingleDealBut"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="OR"
android:textColor="#000"
android:textSize="20sp" />
<android.support.v7.widget.CardView
android:id="@+id/createOngoingDealBut"
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_below="@id/or"
android:layout_marginStart="30dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="30dp"
app:cardCornerRadius="30dp"
app:cardElevation="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/test"
android:orientation="horizontal"
android:weightSum="1">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.3">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_margin="15dp"
android:scaleType="centerInside" />
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.6"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Ongoing Deals List"
android:textColor="#000"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Ongoing daily/weekly time specific deal specials offered to all customers. Create a Happy Hour deals menu"
android:textSize="12sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:src="@drawable/ic_apk_box" />
</RelativeLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
OUTPUT
Vous pouvez le faire en utilisant cardview . Vous devez créer un dessinable supplémentaire. Voici le code.
Votre listview row :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:bottomLeftRadius="8dp"
android:topLeftRadius="5dp"
android:bottomRightRadius="8dp"
android:topRightRadius="5dp"/>
<solid android:color="#ddd"/>
</shape>
</item>
</layer-list>
Créez maintenant un fichier de ressources Drawable dans le dossier drawable nommé round_corners . Ajoutez ensuite ce code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center">
<android.support.v7.widget.CardView
android:layout_margin="10dp"
app:cardCornerRadius="8dp"
app:cardPreventCornerOverlap="true"
app:cardBackgroundColor="@color/first_circle"
android:layout_width="match_parent"
android:layout_height="150dp">
<LinearLayout
android:background="@drawable/rounded_corners"
android:layout_marginBottom="2dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>