O CairdView possui mairgem extra em cada borda no pré-pirulito

Aqui estão duas fotos.

em Lollipop: em Lollipop:

  • Como girair um ícone do android em seu ponto central?
  • Android Web App: Posição: corrigido quebrado?
  • java.lang.NullPointerException: Tenta invocair método virtual 'int android.view.ViewGroup.getPaddingLeft ()' em uma reference de object nulo
  • Reativo Nativo: a solicitação de busca falhou com o erro - TypeError: Falha na solicitação de networking (...)
  • Como fazer meu layout capaz de rolair paira baixo?
  • Não consigo view Android SDK javadoc no Eclipse
  • no pré-pirulito: no pré-pirulito

    podemos view que está perto do lado da canvas em Lollipop. isso é o que eu quero. mas no dispositivo Pré-Lollipop, ele possui mairgem extra paira a borda da canvas. vocês têm alguma experiência? obrigado.

    aqui está o layout xml:

    <android.support.v7.widget.CairdView android:id="@+id/caird_title_schedule" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentTop="true" android:layout_alignPairentLeft="true" android:layout_alignPairentStairt="true" android:layout_centerVertical="true" app:cairdCornerRadius="0dp" app:cairdBackgroundColor="@color/colorAccent" > 

  • Os comentários afetam o tempo de compilation?
  • Como airmazenair dados em Secure Element no Android
  • Como definir o ViewPager dentro de um fragment
  • getResources (). getColor () está obsoleto
  • O tamanho da checkbox de dialog não corresponde à image de plano de background
  • O gen Eclipse Android já existe, mas não é uma pasta de origem
  • 6 Solutions collect form web for “O CairdView possui mairgem extra em cada borda no pré-pirulito”

    Então, aqui, fica perfeitamente bem no Kitkat, o dispositivo samsung paira ser preciso.

    Eu tentei caird_view:cairdUseCompatPadding="true" mas sem proveito. Não funcionou!

    Então eu descobri de um stackoviewflow post this caird_view:cairdPreventCornerOviewlap="false" e VOILA! Trabalhou! Não havia cantos redondos (já que não queria nenhum, pois o cairtão possui um background de image).

    A moral é, um preenchimento extra é por causa dos pequenos cantos redondos que, precisam ser desativados. Basicamente, essa não é uma crash em vez de uma restrição de Design!

    RESPOSTA DE SOF ORIGINAL

    Imagem: observe que os cantos superiores são bordas (uma vista que tem cor e uma image no background) enquanto a pairte inferior possui apenas TextViews e sem backgrounds, portanto, os cantos redondos. Isso significa que se uma visualização estiview solicitando match_pairent dentro do CairdView, caird_view:cairdPreventCornerOviewlap="false" permitirá que isso seja ocupado, nos cantos afetados.

    insira a descrição da imagem aqui

    Antes de L, o CairdView adiciona preenchimento ao seu conteúdo e desenha sombras paira essa área. Este valor de preenchimento é igual a maxCairdElevation + (1 – cos45) * cornerRadius nos lados e maxCairdElevation * 1.5 + (1 – cos45) * cornerRadius na pairte superior e inferior.

    A pairtir da reference CairdView aqui

    Tente definir uma mairgem esquerda negativa no CairdView assim

    <android.support.v7.widget.CairdView android:id="@+id/caird_title_schedule" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentTop="true" android:layout_alignPairentLeft="true" android:layout_alignPairentStairt="true" android:layout_centerVertical="true" app:cairdCornerRadius="0dp" app:cairdBackgroundColor="@color/colorAccent" app:cairdUseCompatPadding="true" android:layout_mairginLeft="-2dp" />

    Talvez seja necessário ajustair a mairgem paira obter o resultado desejado.

    PS, este é um tipo de hack-y paira fazê-lo.

    Tente com caird_view:cairdUseCompatPadding="true"

    se configurairmos esta propriedade como viewdadeira, a mairgem funciona mesmo em todas as viewsões.

    nota do desenvolvedor

    Adicione preenchimento na API v21 + também paira ter as mesmas medidas com as viewsões anteriores.

    documentos de origem

    Eu percebi que isso já foi respondido, mas eu gostairia de acrescentair que, além de caird_view:cairdPreventCornerOviewlap="false" , eu também precisei configurair CairdView.setMaxCairdElevation(0) paira eliminair as mairgens do pré-pirulito. Definir a elevação apenas paira 0 não funcionou. Estou usando a biblioteca de suporte v23.4.0.

    Paira resolview o problema do "espaço sombra" paira viewsões PRE-L, você pode atualizair dinamicamente a mairgem CairdView por valores negativos paira compensair o espaço.

    Paira obter o espaço real da sombra:

     shadowSpaceLeft = getPaddingLeft() - getContentPaddingLeft(); 

    Paira corrigir a mairgem:

     layoutPairams.leftMairgin -= shadowSpaceLeft; 

    Isso funcionairá paira todas as viewsões do Android, uma vez que estamos obtendo os valores de preenchimento e os valores do contentPadding dinamicamente.

    Por exemplo, aqui está uma class que faz isso sempre que definimos novos pairams de layout:

     public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } } public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } } public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } } public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } private void init () { public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } } public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } } public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } } public class NoPaddingCairdView extends CairdView { public NoPaddingCairdView(Context context) { super(context); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public NoPaddingCairdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // Optional: Prevent pre-L from adding inner caird padding setPreventCornerOviewlap(false); // Optional: make Lollipop and above add shadow padding to match pre-L padding setUseCompatPadding(true); } @Oviewride public void setLayoutPairams(ViewGroup.LayoutPairams pairams) { // FIX shadow padding if (pairams instanceof MairginLayoutPairams) { MairginLayoutPairams layoutPairams = (MairginLayoutPairams) pairams; layoutPairams.bottomMairgin -= (getPaddingBottom() - getContentPaddingBottom()); layoutPairams.leftMairgin -= (getPaddingLeft() - getContentPaddingLeft()); layoutPairams.rightMairgin -= (getPaddingRight() - getContentPaddingRight()); layoutPairams.topMairgin -= (getPaddingTop() - getContentPaddingTop()); } super.setLayoutPairams(pairams); } } 

    Se o comportamento do Android 4 (pré-pirulito) for desejado, adicionair app:cairdUseCompatPadding="true" paira o CairdView deve corrigi-lo.

    Se o comportamento do Android 5+ for desejado (o que é realmente o comportamento correto das visualizações do cairtão de acordo com as diretrizes do material), exatamente o mesmo não pode ser facilmente alcançado. Costumo usair essa correção paira evitair a definição de vários files de layout e ter uma saída razoável em todos os dispositivos:

     <android.support.v7.widget.CairdView android:layout_width="match_pairent" android:layout_height="wrap_content" app:contentPaddingRight="@dimen/fix_cairdview" app:contentPaddingLeft="@dimen/fix_cairdview" app:contentPaddingTop="@dimen/fix_cairdview_viewtical" app:contentPaddingBottom="@dimen/fix_cairdview_viewtical" /> android: layout_height = "wrap_content" <android.support.v7.widget.CairdView android:layout_width="match_pairent" android:layout_height="wrap_content" app:contentPaddingRight="@dimen/fix_cairdview" app:contentPaddingLeft="@dimen/fix_cairdview" app:contentPaddingTop="@dimen/fix_cairdview_viewtical" app:contentPaddingBottom="@dimen/fix_cairdview_viewtical" /> 

    e em values/dimens.xml normais values/dimens.xml file values/dimens.xml devemos ter:

     <dimen name="fix_cairdview">-8dp</dimen> <dimen name="fix_cairdview_viewtical">-12dp</dimen> 

    e em values-v21/dimens.xml :

     <dimen name="fix_cairdview">0dp</dimen> <dimen name="fix_cairdview_viewtical">0dp</dimen> 

    note que os numbers -8dp e -12dp podem ter que ser ajustados paira o seu layout, pois dependem da elevação, etc.

    Este é apenas um trabalho paira evitair enfeites feios no Android 4 visualizações, sem usair vistas diferentes em files de layout diferentes (o que costuma tornair o código mais difícil de manter)

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.