android - Optical Bounds 9-patch 禁用内容填充

标签 android android-layout

似乎在父布局上设置 layoutMode="opticalBounds" 会禁用 9-Patch 内容区域。下面的屏幕截图是一个简单的 TextView:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:paddingLeft="20dp"
             android:paddingTop="20dp">

    <TextView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@drawable/shadow_with_stroke_gray"
        android:text="lorem ipsum etc"
        android:padding="0dp"
        />
</FrameLayout>

而左侧的 FrameLayout 将其 layoutMode 设置为默认值 (clipBounds),而右侧的设置为 opticalBounds

9 补丁 PNG 也附在这篇文章中。

这种情况下的正确行为是什么?

TextView paddings gone

正在使用的 9 补丁图像:

enter image description here

根据评论者的建议更新了 9-Patch 图片:

Updated 9-Patch image

更新了来自 SDK 的官方文件

使用来自 SDL (samples/android-20/legacy/ApiDemos/res/drawable-mdpi/btn_default_normal.9.png) 的 9 补丁图像,结果如下所示:

Using SDK file

SDK文件(我添加的光学边界的红色标记):

9-Patch from SDK

问题仍然存在,内容区域未被考虑在内,文本不应绘制在边框上。

最佳答案

删除了 android:padding="0dp" 并且 padding 是正确的。

关于android - Optical Bounds 9-patch 禁用内容填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25238989/

相关文章:

java - 列出应用程序与之通信的 IP

android - java.lang.IllegalStateException : System services not available to Activities before onCreate() 错误

java - 使用正则表达式替换全部不替换完整结果

用于大/小字体的 Android 资源限定符(可访问性)

android - 如何为 Android Wear 应用程序开发 UI 布局

android - 以编程方式无法在 RelativeLayout 中对齐 ImageView

android - 我怎样才能避免使用 Fragment 回调到细节 Activity 的代码重复?

android - 我们可以用任何其他方式在 Android 中访问 C++ 代码而不是使用 JNI

android - 实现自 api 17 以来已弃用的滑动抽屉的替代方法

java - addView 在自定义 FrameLayout 中不可见但可点击