如何解决 Material Design 中 CardView 设置 padding 会失效的问题

阅读时长 4 分钟读完

问题描述

在使用 Material Design 的 CardView 进行页面布局时,我们可能会遇到设置 padding 属性后并没有起到作用的问题。具体表现为,当我们设置 CardView 的 padding 属性时,CardView 的子控件会自动缩小并嵌入 CardView 中,而不是保持原先的大小并按照 padding 的值进行偏移。这种情况下,我们的页面布局就会出现问题。

原因分析

CardView 是一个 FrameLayout 的子类,而 FrameLayout 的特性是使用 padding 时会对子控件进行自动缩放和布局。因此,在 CardView 中设置 padding 时,父控件 FrameLayout 会自动调整 CardView 子控件的大小和位置,从而使 padding 失效。这是 Android 原生的特性,因此我们需要一些技巧来解决这个问题。

解决方案

  1. 使用 CardView 作为容器 我们可以将需要设置 padding 的控件放在 CardView 之内,并将 CardView 当做容器来使用。在这种情况下,CardView 会自动将子控件包含在内,并根据传入的 padding 值进行偏移。代码实现如下:
-- -------------------- ---- -------
----------------------------------
    -----------------------------------
    ------------------------------------
    ----------------------------
    --------------------------
    ------------------------

    ---------
        -----------------------------------
        ------------------------------------
        ----------------------
        ------------------- ------- --

------------------------------------
  1. 嵌套一个容器 我们可以使用另一个父容器来包含 CardView,并在该容器中设置 padding 值。在这种情况下,CardView 子控件的大小和位置不会受到影响。代码实现如下:
-- -------------------- ---- -------
-------------
    -----------------------------------
    ------------------------------------
    ----------------------------
    ------------------------------
    -----------------------

    ----------------------------------
        -----------------------------------
        ------------------------------------
        --------------------------
        ------------------------

        ---------
            -----------------------------------
            ------------------------------------
            ------------------- ------- --

    ------------------------------------

---------------

总结

使用 Material Design 的 CardView 进行页面布局时,由于父控件 FrameLayout 的特性,设置 padding 会失效。我们可以使用 CardView 作为容器或者嵌套一个容器来解决这个问题。这些技巧可以避免我们在布局中遇到一些不必要的问题,提高我们的开发效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b28f7448841e9894ebd9ad

纠错
反馈