Android/Spinner:删除箭头右侧的填充

Posted

技术标签:

【中文标题】Android/Spinner:删除箭头右侧的填充【英文标题】:Android/Spinner: Remove padding to the right of the arrow 【发布时间】:2018-10-18 13:56:47 【问题描述】:

我在相对布局中使用微调器和其他几个布局元素(layout-v21):

<Spinner
android:id="@+id/spinner"
android:layout_
android:layout_
android:layout_alignBottom="@+id/textList"
android:layout_alignTop="@+id/textList"
android:layout_alignParentEnd="true"
android:layout_marginLeft="5dp"
android:layout_marginRight="0dp"
android:layout_toEndOf="@+id/textList"
android:paddingRight="1dp"/>

这会设置到父布局结束的距离:

android:layout_marginRight="0dp"
android:layout_alignParentEnd="true"

这设置了微调器中的选项与箭头左侧的距离(文本的右侧填充):

android:paddingRight="1dp"

但是有没有办法摆脱(或至少缩小)箭头右侧但仍在微调器布局元素内的不必要的空间/填充(所以我可以然后在不改变微调器大小的情况下在左侧使用更多空间)?

这就是我要说的:

编辑:这是RelativeLayout的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.mycompany.myapp.MainActivity"
android:backgroundTint="#000000"
android:focusableInTouchMode="true">

【问题讨论】:

请同时提供父RelativeLayout的代码。 因为你已经给定了宽度 android:layout_ 。简单的增加 android:layout_marginStart="5dp" 到 10dp/15dp。 @LuísHenriques 我将其添加到第一篇文章中。 @RohanLodhi 请解释这对我的情况有何帮助。 android:layout_marginStart=5dp 控制到微调器左侧布局元素的距离,与android:layout_marginLeft=5dp 相同。两者都不会改变填充,只会改变整个元素的大小。 @Neph android:paddingRight="@dimen/activity_horizo​​ntal_margin" 在相对布局中删除。 【参考方案1】:

它对我有用:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:backgroundTint="#000000"
android:focusableInTouchMode="true">

    <Spinner
        android:id="@+id/spinner"
        android:layout_
        android:layout_
        style="@style/spinner_style"
        android:layout_alignParentEnd="true"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="0dp"
        android:paddingRight="1dp"/>

styles.xml

 <style name="spinner_style">
        <item name="android:layout_height">35dp</item>
        <item name="android:background">@drawable/spinner_bg</item>
</style>

spinner_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item>
                <shape>
                    <gradient android:angle="90" android:endColor="@android:color/white" android:startColor="@android:color/white" android:type="linear" />

                    <stroke android: android:color="@color/colorAccent" />

                    <corners android:radius="0dp" />

                    <padding android:bottom="6dp" android:left="6dp" android:right="6dp" android:top="6dp" />
                </shape>
            </item>
            <item>
                <bitmap android:gravity="center|right" android:src="@drawable/ic_spin_down_arrow" />
            </item>
        </layer-list>
    </item>

</selector>

【讨论】:

它究竟为您删除了什么?箭头右侧的内边距,但仍 微调器元素或微调器右侧的内边距以及 微调器元素?如果无法描述,可以在我发布的第一张图片上标记该区域。 @Neph 立即查看。抱歉没有看到您的第二张图片。 啊,我明白了,你正在创造自己的风格。我猜如果不这样做就无法删除右侧的填充?不过请删除第一部分,只保留编辑过的部分,否则会令人困惑。我必须在哪个文件夹中将“spinner_bg.xml”文件放入“values”(“styles.xml”也在其中)或“layout-v21”中,我在哪里可以获得spinner_bgic_spin_down_arrow文件来自(当然还没有在我的“可绘制”文件夹中)。 spinner_bg.xml 在 drawable 文件夹中,您可以使用任何下拉箭头,您可以轻松地从 google 或 android studio 获取。如果可行,请点赞。

以上是关于Android/Spinner:删除箭头右侧的填充的主要内容,如果未能解决你的问题,请参考以下文章

使用对象列表填充 Android Spinner

如何为 html select 中的箭头添加填充?

如何更改android spinner 背景

Android Spinner:删除文本和下拉图标之间的多余空格

如何从 tblContacts 中选择 android spinner

隐藏 SwiftUI DisclosureGroup 箭头并删除默认填充