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

5

我在相对布局中使用了一个下拉框(spinner),与其他一些布局元素(layout-v21)并列:

My spinner

<Spinner
android:id="@+id/spinner"
android:layout_width="155dp"
android:layout_height="34dp"
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"

但是否有一种方法可以摆脱(或至少缩小)箭头右侧但仍在旋转器布局元素内部的不必要空间/填充(这样我就可以在不改变旋转器大小的情况下在左侧使用更多空间)?这就是我所说的。

enter image description here

编辑:这是RelativeLayout的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
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的代码。 - Luís Henriques
由于您已经给定了固定宽度 android:layout_width="155dp"。只需将 android:layout_marginStart="5dp" 增加到 10dp/15dp 即可。 - Rohan Lodhi
@LuísHenriques 我已将其添加到第一篇帖子中。 - Neph
@RohanLodhi 请解释一下这对我的情况有什么帮助。android:layout_marginStart=5dp 控制着位于下拉列表左侧的布局元素的距离,与 android:layout_marginLeft=5dp 是相同的。两者都不会改变内边距,只会影响整个元素的大小。 - Neph
@Neph 在相对布局中移除 android:paddingRight="@dimen/activity_horizontal_margin"。 - Rohan Lodhi
@RohanLodhi请看我添加的第二张图片,您的建议移除了Spinner元素和RelativeLayout右侧之间的填充,因此需要删除/减小红圈右侧的填充(标记我要删除/减小的内容)。它不会改变Spinner元素内部的实际内容。 - Neph
1个回答

4

它对我有效:

<?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_width="match_parent"
android:layout_height="match_parent"
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_width="155dp"
        android:layout_height="34dp"
        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:width="1dp" 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
@Neph 现在检查一下。抱歉没有看到你的第二张图片。 - Rohan Lodhi
啊,我看到你正在创建自己的风格。那么没有其他方法可以去除右侧的填充吗?请删除第一部分,只留下编辑后的部分,否则会令人困惑。我应该把“spinner_bg.xml”文件放在哪个文件夹中,“values”(与“styles.xml”在同一文件夹中)还是“layout-v21”,我在哪里可以获取“spinner_bg”和“ic_spin_down_arrow”文件(当然我的“drawable”文件夹中没有它们)。 - Neph
在drawable文件夹中有spinner_bg.xml,您可以使用任何下拉箭头,您可以轻松从Google或Android Studio获取。如果它有效,请点赞。 - Rohan Lodhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接