【问题标题】:Elevation shadow is clipped高程阴影被剪裁
【发布时间】:2015-12-29 20:19:27
【问题描述】:

我尝试向我的自定义按钮添加高度,但结果是:

如您所见,阴影被剪裁了。我试图在 StackOverflow 和谷歌中搜索,我发现了类似的问题,但没有答案:)

XML:

<Button
   android:id="@+id/email_sign_in_button"
   android:layout_width="141dp"
   android:layout_height="45dp"
   android:textAlignment="gravity"
   android:text="@string/action_sign_in"
   android:gravity="center_horizontal"
   android:elevation="4dp" />

这是我的自定义按钮样式。

button.xml:

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_enabled="false"
    android:drawable="@drawable/button_disabled" />
<item
    android:state_pressed="true"
    android:state_enabled="true"
    android:drawable="@drawable/button_pressed" />
<item
    android:state_focused="true"
    android:state_enabled="true"
    android:drawable="@drawable/button_regular" />
<item
    android:state_enabled="true"
    android:drawable="@drawable/button_regular" />
</selector>

未按下时的样式。

button_regular.xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:angle="-90"
    android:centerX="10"
    android:centerY="10"
    android:endColor="#30bbff"
    android:gradientRadius="10"
    android:startColor="#0081c0"
    android:type="linear"/>
<stroke android:width="5dip" android:color="#ffffff" />
<corners android:radius="20dip"/>
<padding android:left="7dp"
    android:top="7dp"/>
</shape>

【问题讨论】:

    标签: android xml


    【解决方案1】:

    您的阴影可能会被视图的边界剪裁。尝试在按钮底部添加填充。

    如果按钮位于父级的底部,则父级 ViewGroup 也可能正在剪切阴影。确保父级有填充并在父级上设置android:clipToPadding="false"

    【讨论】:

    • 如果你能负担得起添加填充,这很有效,但在大多数情况下,额外的填充看起来很糟糕。标准高度(不应用裁剪)可以在其他视图上绘制阴影,必须有一种方法可以在不添加填充的情况下达到相同的结果..
    • @behelit 我认为您可以同时使用 android:clipChildren="false" 和 android:clipToPadding="false" 来解决所有这些问题。
    • @androiddeveloper 是对的,我需要父级上的 all 3(填充、clipChildren=false、clipToPadding=false)。
    • 确保父级有填充,没有边距,否则这将不起作用。
    • 节省时间,谢谢
    【解决方案2】:

    android:clipChildren="false"android:clipToPadding="false" 添加到按钮两个祖先ViewGroup

    【讨论】:

      【解决方案3】:

      完整答案

      将这两行添加到父视图

      android:clipChildren="false"

      android:clipToPadding="false"

      示例:

      <androidx.constraintlayout.widget.ConstraintLayout
                  android:clipChildren="false"
                  android:clipToPadding="false"
                 ... >
      
              <TextView
               style="@style/TextShadowStyle"
                ....
                  />
      

      文字阴影样式:

       <style name="TextShadowStyle">
              <item name="android:shadowColor">@color/black</item>
              <item name="android:shadowDx">10</item>
              <item name="android:shadowDy">10</item>
              <item name="android:shadowRadius">5</item>
          </style>
      

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 2013-07-12
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2022-10-07
        相关资源
        最近更新 更多