在具有1个字符的TextView周围创建均匀的边框

时间:2018-11-28 16:16:03

标签: android android-layout

Desired implementation

您好,我想在Android视图中重新创建此“设计”。基本上在TextView周围有一个均匀的边框。

我创建了一个TextView:

            <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="R"
            android:textSize="30sp"
            android:background="@drawable/border_red"
            android:gravity="center" />

我添加了一个可绘制的形状:

<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@android:color/transparent"/>
    <stroke
        android:width="4dp"
        android:color="#ff687b" />
    <corners android:radius="4dp"/>
    <padding android:right="0dp" android:left="0dp" android:bottom="0dp" android:top="0dp"/>
</shape>

我在Android预览器和应用程序中的奇怪行为得到了这种奇怪行为:

enter image description here

我尚未定义任何填充。它们都设置为0dp,但是边界似乎已经有某种边距/填充。

此行为使得很难在字符周围创建均匀的矩形边框。 :-(

出了什么问题,我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用android:includeFontPadding="false"TextView删除字体填充

<TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="R"
            android:textSize="30sp"
            android:includeFontPadding="false"
            android:background="@drawable/border_red"
            android:gravity="center" />

enter image description here

这将从padding的顶部和底部删除大部分TextView

要获得一个完美的正方形,您必须将widthheight分别设为TextView

答案 1 :(得分:1)

如果您不同意,可以。我向您展示,以便您学习。 :)

使用与上述相同的XML ...

这是我的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.vzw.www.myapplication.MainActivity"
    android:orientation="vertical"
    android:padding="10dp">


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/red_border"
        android:padding="10dp">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:includeFontPadding="false"
            android:text="H"
            android:textStyle="bold"/>

    </LinearLayout>

</LinearLayout>

这是结果……

enter image description here

您也可以通过创建自定义TextView来实现此目的...但是我不会介绍...但是如果您愿意,可以。实际上,这是一个更好的解决方案。