Android 9补丁扩展问题

Android 9补丁扩展问题,android,background,scale,nine-patch,Android,Background,Scale,Nine Patch,当使用9-patch图像作为EditText字段的背景时,我遇到了缩放问题。我有一张表格,它延伸了整个宽度,在这里我有下面的表格行,它填充了表格的宽度 问题是,我使用了一个9面片图像作为背景,但编辑文本字段没有延伸到整个宽度,它只延伸到提示文本的宽度 <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_ver

当使用9-patch图像作为EditText字段的背景时,我遇到了缩放问题。我有一张表格,它延伸了整个宽度,在这里我有下面的表格行,它填充了表格的宽度

问题是,我使用了一个9面片图像作为背景,但编辑文本字段没有延伸到整个宽度,它只延伸到提示文本的宽度

<TableRow
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical|center_horizontal" >

    <EditText
        android:id="@+id/et_username"
        android:contentDescription="@string/hint_enterUsername"
        android:hint="@string/hint_enterUsername"
        android:singleLine="true"
        android:textSize="@dimen/edittext_textsize"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"                    
        android:gravity="center_horizontal|center_vertical"
        android:background="@drawable/background_field_top" />

</TableRow>

我可以在图形视图中看到,行的宽度确实会拉伸,但EditText字段不会,如所附图像所示

有没有人知道如何将edittext拉伸到整个尺寸?下面是我正在使用的9面片图像


来自Android开发者文档

水平排列其子级的布局一个表格行应该 始终用作TableLayout的子级。如果TableRow的父级是 不是TableLayout,TableRow将作为水平布局 线性布局

@Nipun Gogia的答案是不正确的,为什么要将TableRow(行为类似于水平线性布局)放在只有一个子编辑文本的线性布局中

相反,您应该将EditText视图放置为的直接子视图,然后它将显示为跨所有表列的单行。如果需要,还可以添加更多的TableRow和列

使用九个补丁拉伸EditText视图的背景图像:

你需要编辑9pNG文件的9-补丁规则,设置图像的可伸展区域,将顶部规则(黑色1px线)放置在图像的中间,现在它只在透明端拉伸,使图像未拉伸。 了解如何帮助她:

要命!记住用扩展名.9.png保存图像


以文件扩展名保存的九块补丁图像:背景。9.png


修改较小的图像,由于九个面片规则,它看起来与上面相同


已修改图像,但高度不可拉伸



注意:如果使用“将图像另存为…”下载上述图像,请记住在文件名中添加.9.png,以使其正常工作。

确保图像文件名为background\u field\u top.9.png(确保有.9.png) 我对您的图像做了一些小的更改,使圆角更平滑,但这不是核心问题。
如果这没有帮助,请检查没有表格的背景是否正常工作,以确定问题是布局还是背景图像。

您的工作对我来说很好。.我正在使用自己的9补丁。。。这是我的密码:

        <LinearLayout
            android:id="@+id/layout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical|center_horizontal" >

                <EditText
                    android:id="@+id/et_username"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/areanumber"
                    android:gravity="center_horizontal|center_vertical"
                    android:singleLine="true"
                    android:text="hello" />
            </TableRow>
        </LinearLayout>

这里的区域号是我的9补丁图片。。。只需尝试将代码包装在linearlayout中 我实现了你的9补丁的形象,它也工作良好


你能把9-patch图片包括进来吗?嗨@yoah,我在上面添加了9-patch图片,它看起来正确吗?嗨@Xigmond,谢谢你的评论。我已经检查了这个链接,并用我觉得应该是什么样子创建了我的9补丁。我已经把我的9张图片包含在我原来的帖子里了,你介意看一下它吗?看看它看起来还好吗?上面的规则只需要放在图片中间(我想让它均匀地向两边伸展)。在透明区域,左侧的顶部和底部应为1px,因为高度由图像设定,无需拉伸。右下规则是您希望文本显示在图像中的位置(如填充),它看起来很好(看不到底部的黑线),尝试一下这个九补丁编辑器,我认为它比SDK中提供的要好得多。Hi@GrahamB我下载了你的图像文件,注意到它没有正确的九补丁文件扩展名。请参阅更新的答案。Obs!,看起来像是。在这里上传图像时会被删除,因此如果您下载图像,请在文件名中添加.9.png。您好@yoah,非常感谢。我已经测试了9-patch,但是没有tablelayout,正如下面所说的“Nipun Gogia”,它工作得很好,当我尝试将它粘贴到tablelayout中时,它不工作,为什么会这样?非常感谢您的详细评论。我已经测试了你上面所说的,它为我工作。但是,当我尝试将其添加到tablelayout(这里没有tablelayout,只有tablerow)时,它不起作用。你知道为什么它不起作用吗,或者甚至可以用一个tablelayout围绕你的行进行检查,看看它对你有用吗?嘿,我得到了解决方案:你所要做的就是给你的tableRow赋予weightsum,即“android:weightsum=“1”,给android:layou weight=“1”编辑文本。为什么要在线性布局中放置表格行?阅读Android开发者的文档,它将表现为线性布局。这就是为什么android:weightsum现在是有效的。你说你想用表格布局?有了这个解决方案,就不需要TableRow了。是的,我知道,我通过使用linearlayout和TableLayout来实现这段代码。。。。阅读我的第二条评论。。。我没有编辑我的代码(答案),但我根据问题给出了想要的答案。。。在使用tablelayout时,我们必须给出权重和才能得到所需的答案