【问题标题】:Centering large text inside a button in Android not working在Android中的按钮内居中大文本不起作用
【发布时间】:2016-05-31 17:32:45
【问题描述】:

我需要在Button 中居中一个大数字,但它总是向下移动显示。请看图片:

我的 activity_main.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:textSize="490sp"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center_vertical"
        android:gravity="center"
        android:textAlignment="center"
        android:includeFontPadding="false"
        android:text="8" />
</LinearLayout>    

如果我设置一些较小的文本大小 - 它会正确居中。 此外,如果我将ImageButton 与android:scaleType="center" 一起使用,图像将完美居中。但我需要将文本居中。

你能帮忙吗,如何解决这个问题?

这绝对是一个 Android 错误。可能有一些类或解决方法。

【问题讨论】:

  • 请显示完整版面。您的按钮受父级约束,无法长到足以容纳文本。要么更改父级以允许更大的子级,要么减小文本大小。
  • 我尝试了不同的布局——大文本总是向下移动。您可以创建一个新的简单项目并尝试在按钮内放置一些大文本。与 TextView 相同的问题。可能需要为这种居中实现一些特殊的类,但是在哪里可以找到它。
  • 这不是完整的布局,您的 LinearLayout 可能仍受其父级的约束。请发布完整的 XML 布局。
  • 我认为 fill_parent 有问题。你能试一下吗 。按钮的宽高 wrap_content &lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="8" android:textSize="80sp" /&gt;
  • 我建议制作 450sp..

标签: android android-layout button textview android-button


【解决方案1】:
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

   <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:gravity="center" 
        android:text="8" 
        android:textSize="80sp" />

所以你在底部和线性布局中使用fill_parent作为参数,所以我猜可能发生的情况是它没有足够的空间用于线性布局和按钮,使用wrap_content可以让底部适合文本,而不是挂在布局重量和高度

***** 更新**

我看到你已经添加了

android:includeFontPadding="false"

如果你真的想删除空格,请尝试添加

android:layout_marginTop="-100dp"

到您的按钮参数中。

【讨论】:

  • OP,这就是你的做法。如果您只关心高度,您可能只需要在高度上使用wrap_content。无论哪种方式,如果您愿意,您都可以添加一些内边距,为内容的边缘留出一些空间。
  • 什么都没有改变——仍然向下移动。总是有一些字体填充。但是如何摆脱它。
  • 好的。没有理由布局应该给你任何额外的填充/边距。它必须是包含它的任何布局。您能否编辑您的原始帖子以包含您的应用的容器布局(工具/应用栏、任何引用此容器的布局等)?
【解决方案2】:

试试这个:

<Button
    android:textSize="80sp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:includeFontPadding="false"
    android:text="8"
    android:paddingTop="1dp" />

【讨论】:

  • 也下移了。
  • 发布您的完整 xml
  • 我已经尝试只使用这种带有非常大文本的布局 - 仍然向下移动。
  • 不幸的是,如果文本大于布局,则文本不会压缩。如果布局是 90dp 的高度和宽度,我给你的答案将起作用。解决方案,让按钮变大或文字变小。
【解决方案3】:

好吧,我建议如果你将 textsize 设为 450sp,它会给你完美的输出

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:textSize="450sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"

        android:text="8" />
</LinearLayout>

输出

【讨论】:

  • 是的,我知道这一点。但就我而言,文本大小至关重要。我有一个带有许多此类按钮的网格,我无法进一步减小字体大小。我只需要在整个按钮高度(甚至截断顶部和底部)上居中文本。
  • 网格是什么意思,您想要达到的视图到底是什么。分享屏幕截图
  • 网格——我的意思是很多线性布局,但这并不重要。该问题在我的主要帖子(简单布局)上可见。为什么如果我们将字体大小设置为 490sp 数字会下移?空间就在那里。如何删除这个隐藏的顶部填充。我现在正在尝试使用 minHeight:stackoverflow.com/a/19300777/2240880 — 没有结果。
  • 当然很重要..如果您尝试设置多个类似的视图,请将其与回收器视图一起使用并进行自定义..也许您的问题会解决
【解决方案4】:

在您的情况下,定义的 TextView 的大小对于您正在测试的设备来说太大了。如果您使用更高分辨率的设备测试相同的布局,您将获得所需的结果。 您所要做的就是通过在 res/values-ldpi、values-mdpi、values-hdpi、values-xhdpi 等中为“textSize”定义不同的值,为不同的分辨率设备定义不同的文本大小。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:textSize="@string/textSize"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center_vertical"
        android:gravity="center"
        android:textAlignment="center"
        android:includeFontPadding="false"
        android:text="8" />
 </LinearLayout>  

【讨论】:

  • 是的,我知道这一点。但就我而言,文本大小至关重要。我有一个带有许多此类按钮的网格,我无法进一步减小字体大小。我只需要在整个按钮高度(甚至截断顶部和底部)上居中文本。
  • 对网格中的所有项目使用相同的 textSize。那么结果就会如预期的那样。
【解决方案5】:

您可以使用一种技巧来实现此目的:将Button 包裹在FrameLayout 中,并使用负边距使Button 居中,如您所见:

<FrameLayout
    android:layout_width="41dp"
    android:layout_height="41dp">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:layout_marginTop="-7dp"
        android:text="8"
        android:textSize="40dp"/>
</FrameLayout>

您会发现8 在FrameLayout 的范围内居中。我已经在多个 API 上测试了这个方法,文本仍然集中在每个 API 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多