Elevation met Cardview in Preview in Android Studio, maar niet op Device

Ik probeerde schaduweffect te maken met Cardview en het schaduweffect wordt weergegeven in de xml Preview, maar er is geen schaduweffect op het fysieke apparaat

Recycler View on Device which is not showing any Cardview Effect

Preview on Android Studio which is showing the shadow effect

Hier is de code voor de xml van het gegevensitem van de recycleerder.

<?xml version="1.0" encoding="utf-8"?>




    

        

        

        

    


0

8 antwoord

Dit gebeurt omdat uw RecyclerView uw kaarten direct naast elkaar plaatst, zodat er geen ruimte is voor het systeem om schaduw te tekenen. Je kunt een kleine schaduw in de bovenste en onderste hoeken van je kaarten zien (omdat de afgeronde hoek heel weinig ruimte overlaat voor het systeem om de schaduw in te tekenen).

Om ruimte te laten voor de schaduw, moet u een artikelbeschrijving toevoegen aan uw RecyclerView waarmee de offsets van elke kaart worden ingesteld.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler);
    recycler.addItemDecoration(new MyItemDecoration(this));
    ...
}

private static class MyItemDecoration extends RecyclerView.ItemDecoration {

    private final int offset;

    public MyItemDecoration(Context context) {
        this.offset = context.getResources().getDimensionPixelSize(R.dimen.card_offset);
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.set(offset, offset, offset, offset);
    }
}

En definieer de gewenste offset als een dimen-resource, zoals deze:


    3dp

Zonder ItemDecoration :

enter image description here

Met ItemDecoration :

enter image description here

1
toegevoegd

Dit gebeurt omdat uw RecyclerView uw kaarten direct naast elkaar plaatst, zodat er geen ruimte is voor het systeem om schaduw te tekenen. Je kunt een kleine schaduw in de bovenste en onderste hoeken van je kaarten zien (omdat de afgeronde hoek heel weinig ruimte overlaat voor het systeem om de schaduw in te tekenen).

Om ruimte te laten voor de schaduw, moet u een artikelbeschrijving toevoegen aan uw RecyclerView waarmee de offsets van elke kaart worden ingesteld.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler);
    recycler.addItemDecoration(new MyItemDecoration(this));
    ...
}

private static class MyItemDecoration extends RecyclerView.ItemDecoration {

    private final int offset;

    public MyItemDecoration(Context context) {
        this.offset = context.getResources().getDimensionPixelSize(R.dimen.card_offset);
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.set(offset, offset, offset, offset);
    }
}

En definieer de gewenste offset als een dimen-resource, zoals deze:


    3dp

Zonder ItemDecoration :

enter image description here

Met ItemDecoration :

enter image description here

1
toegevoegd

try this use app:cardElevation and app:cardUseCompatPadding like this if required name splace than add this xmlns:app="http://schemas.android.com/apk/res-auto"

    
0
toegevoegd
Het werkt niet
toegevoegd de auteur Lakshya Punhani, de bron

try this use app:cardElevation and app:cardUseCompatPadding like this if required name splace than add this xmlns:app="http://schemas.android.com/apk/res-auto"

    
0
toegevoegd
Het werkt niet
toegevoegd de auteur Lakshya Punhani, de bron

Ik denk dat je je app test op een Kitkat-apparaat. Probeer je app te testen op Lollipop of een nieuw apparaat.

0
toegevoegd

Ik denk dat je je app test op een Kitkat-apparaat. Probeer je app te testen op Lollipop of een nieuw apparaat.

0
toegevoegd

Probeer het gebruik van: app: card_elevation = "2DP"

0
toegevoegd

Probeer het gebruik van: app: card_elevation = "2DP"

0
toegevoegd