简体   繁体   English

如何删除TextView上边距?

[英]How to remove TextView top margin?

I do have a problem with TextView . 我确实遇到TextView问题。 I don't want to have any margin/padding above it. 我不希望它上面有任何边距/填充。

<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/ptp_hour"
          android:textColor="@color/black"
          android:textSize="100dp"
          android:height="100dp"
          android:layout_marginTop="0dp"
          android:paddingTop="0dp"
          android:includeFontPadding="false"
          android:maxLines="1"
          android:text="10"/>

My TextView looks like this and despite the textSize and height are set to the same value, there is a space above font. 我的TextView看起来像这样,尽管textSizeheight设置为相同的值,但字体上方还有一个空格。 It bothers me because I want to put another view relatively to the top of the font. 这让我感到困扰,因为我想把另一个视图放在相对于字体的顶部。 Is this spacing included into font itself? 这个间距是否包含在字体本身中?

RelativeLayout中的TextView

And another question: If I found out that margin 20dp from top and 7dp from bottom works perfectly on my device, can I rely that it will behave in a similar way on other screens? 还有一个问题:如果我发现距离顶部20dp和底部7dp的余量在我的设备上完美运行,我可以依赖它在其他屏幕上的表现方式相似吗? (these margins are for buttons) (这些边距适用于按钮)

使用android:includeFontPadding="false"在类似的情况下帮助了我很多。

I had the same issue where setting android:includeFontPadding=false did not help. 我有同样的问题,设置android:includeFontPadding=false没有帮助。 The best solution I could find in reasonable time was to override the TextView's onDraw method and to adjust the canvas for the difference between the font metrics' top and ascent values: 我能在合理的时间内找到的最佳解决方案是覆盖TextView的onDraw方法,并调整画布以获取字体度量的top和ascent值之间的差异:

FontMetricsInt fontMetricsInt;
@Override
protected void onDraw(Canvas canvas) {
    if (adjustTopForAscent){
        if (fontMetricsInt == null){
            fontMetricsInt = new FontMetricsInt();
            getPaint().getFontMetricsInt(fontMetricsInt);
        }
        canvas.translate(0, fontMetricsInt.top - fontMetricsInt.ascent);
    }
    super.onDraw(canvas);
}

What you need to do is to put the other view relative to the top of the font, and give it a negative android:layout_marginBottom in dip, such that it matches the top of the font. 你需要做的是将另一个视图放在相对于字体顶部的位置,并在dip中给它一个负面的android:layout_marginBottom ,使其与字体的顶部相匹配。 If the font has a margin, I don't think there is a better way of doing it. 如果字体有边距,我认为没有更好的方法。

Yes this space included by default. 是的,默认包含此空格。 You are not able to remove that space as per my search area. 您无法根据我的搜索区域删除该空间。 So you need to have to implement some logic to have such view. 所以你需要实现一些逻辑来拥有这样的视图。

See below Image: 见下图:

在此输入图像描述

Its not a good idea but you can do like below code: 它不是一个好主意,但你可以像下面的代码:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="wrap_content"
    android:background="#ffffff">
    <TextView android:layout_width="wrap_content"           
        android:layout_height="wrap_content"           
        android:id="@+id/ptp_hour"           
        android:textColor="@android:color/black"           
        android:textSize="100sp"
        android:lineSpacingMultiplier="0.8"
        android:scrollY="-100dp"
        android:scrollX="100dp"
        android:text="10"/>
    <TextView 
        android:text="10"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textColor="#00FFFFFF"
        android:shadowColor="#000000"
        android:shadowDy="-50"
        android:shadowRadius="1"
        android:textSize="100dp"/>

</LinearLayout>

Here, first "10" is of your properties and second one is as i have set for you. 在这里,第一个“10”是你的属性,第二个是我为你设置的。

Enjoy. 请享用。 :)) :))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM