【发布时间】:2015-12-16 15:37:09
【问题描述】:
简介:
随着 Android 6.0.1 的新版本,Android 似乎对 Spinner 组件进行了一些更改,因为默认情况下,向下胡萝卜周围的内部填充有点大。
我在一个应用程序上注意到了这一点,我没有修改任何代码,只是更新了设备上的操作系统,但微调器的大小不同。
情况:
我在 RelativeLayout 中有 2 个微调器,一个挨着另一个(请注意其余的组件,我添加了所有内容,以便您可以看到这部分布局 - 删除了完全不必要的属性或视图 ID)
<RelativeLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/container_for_buttons_on_the_right"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true">
<!-- Buttons here-->
</LinearLayout>
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spinner_1"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ViewSwitcher
android:id="@+id/spinner_switch"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_toEndOf="@id/spinner_1"
android:layout_toLeftOf="@id/container_for_buttons_on_the_right"
android:layout_toRightOf="@id/spinner_1"
android:layout_toStartOf="@id/container_for_buttons_on_the_right"
android:inAnimation="@anim/fade_in"
android:outAnimation="@anim/fade_out">
<android.support.v7.widget.AppCompatSpinner
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- ImageView properties are incomplete but I need it there.-->
</ViewSwitcher>
</RelativeLayout>
Spinner 适配器用于getView() 方法的布局是这样的:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:singleLine="true"
tools:text="Test" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:gravity="center"
android:paddingLeft="4dp"
android:singleLine="true"
android:textColor="@color/text_primary"
android:textSize="@dimen/text_size_body"
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:text="7%" />
</LinearLayout>
举例:
屏幕截图由 2 个单独的屏幕截图组合而成:
- 顶部是在运行 Android 6.0 的 Nexus 5 设备上拍摄的
- 下面的图片也是在 Nexus 5 设备上拍摄的,但在 Android 6.0.1 上运行
- 编辑 1
使用支持库中的 AppCompatSpinner 不会改变行为。使用的支持库版本为23.1.1
【问题讨论】:
-
我们必须在向下插入符号周围添加更多填充以避免显示波纹效果时出现错误。如果您需要恒定大小,请将背景从框架中复制出来并使用它,或者使用 AppCompat。
-
我确实使用 AppCompat :)。你能告诉我那个填充物的确切尺寸是多少吗?在我看来大约是 8 点或 10 点?
-
它是 12dp 的结束填充和恒定的 48dp 结束对齐间隙,实际上是 12dp 的开始填充。您可以直接在
platforms/android-23/data/res/drawable/spinner_background_material.xml下的Android SDK目录中查看。 -
感谢您的回复,@alanv。我会从这里拿走。
标签: android android-layout android-spinner android-6.0-marshmallow android-6.0.1-marshmallow