4

我的 textview 对象中有不必要的填充。让我们只关注下图中右上方的文本视图,即带有1.48and的文本视图6.91。我的要求是文本绘制到其自身边界的右上角,因此它是“顶部对齐”的DIJACOR和“右对齐”到+0.01. 我试过了gravity="top|right"includeFontPadding=falsepaddings=0无济于事。对于第二种情况,渲染结果在 之后显示了一些额外的空格6.91,使其与-0.01下面的不对齐。任何人都可以与我分享如何解决这个问题?谢谢!

网格视图对象

这是我定义 textView 对象的方式:

<TextView
    android:id="@+id/priceLast"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="0dp"
    android:gravity="top|right"
    android:includeFontPadding="false"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    android:singleLine="true"
    android:text="@string/price"
    android:textColor="@color/dark_green"
    android:textIsSelectable="false"
    android:textSize="24sp"
    android:textStyle="bold" />

根视图组:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg_card_selector"
    android:orientation="vertical"
    android:paddingBottom="8dp"
    android:paddingTop="4dp" >
4

7 回答 7

3

对于案例 #2,原因是在大多数字体中,所有数字都具有相同的字符宽度(以像素为单位)。所以数字“1”和“8”采用相同数量的宽度像素。原因是您可以将数字写在彼此之上,并且数字将始终对齐。这意味着像“4.1”这样的字符串右侧的空像素将比“4.8”多。解决方案是使用每个数字都具有紧凑宽度的字体,或者拥有自己的视图,将数字呈现为位图,找到最右边的非空像素,然后移动位图以使其与右侧对齐。

于 2013-11-02T16:32:01.833 回答
2

您可见的填充是默认字体填充,并且由于字体大小不同,您会遇到一些不匹配。

您可以尝试多种方法来解决此问题:

1) 尝试修复 TextViews 的高度(即带有 DIJACOR 和 1.48 的一个),例如:android:layout_height="100dp",这将解决您的顶部对齐问题。您可以根据需要调整高度。

2) 用于“1”之后的额外空间。如果你仔细观察,1.48 中也有空格,在“1”之后。这意味着字体在“1”之后有额外的空间。如果我们的假设是正确的,那么使用一些不同的字体可以解决这个问题。尝试使用: android:fontFamily="sans-serif" OR android:fontFamily="sans-serif-light" OR android:fontFamily="sans-serif-condensed" OR android:fontFamily="sans-serif-thin"

于 2013-11-02T19:43:52.290 回答
0

我认为它是因为 1。1 比 9 薄,并且所有数字都包含在默认区域中。但是你可以添加android:paddingRight="-1dp". 它不健康,但应该有效。

于 2013-10-24T14:57:39.580 回答
0

我试图用标准字体模仿你的布局,我认为由于 DIJACOR 字符串和 1.78 之间的大小差异,会弹出这个填充。也许您可以尝试将 marginTop 添加到 DIJACOR 字符串?如果 DIJACOR 专栏的成员与 DIJACOR 相关,那么添加 marginTop 不会显着改变您的布局。

从图形布局视图(等于在模拟器中查看)

于 2013-11-01T13:34:25.507 回答
0

我认为 6.91 的多余空间在字体内部,你不能帮助它。要让它一直到父级的右上角,请确保父级没有填充。

于 2013-10-24T13:43:47.290 回答
0

我会说,删除DIJACORTextView 和1.48TextView 的填充并为两者添加边距。或者将它们添加到您可以发布paddingTopmarginTop根据需要的线性布局。

于 2013-11-01T14:00:19.477 回答
0

你的问题是不同的字体大小。有些字符高于 9,例如 Î。这些字符在通常的数字和字母上方也需要空格。所需的空间不是字体间距,因此 XML 指令将无济于事。Android 使用视图高度来对齐视图,这就是为什么您构思的顶部边框不匹配的原因。

我遇到了同样的问题,没有简单的方法解决它。您可以做的最好的事情是使用 marginTop 来处理具有负边距的较大文本,但在动画方面可能会出现问题。或者,您也可以将 paddingTop 添加到其他文本视图。

于 2013-11-01T20:33:01.927 回答