gpt4 book ai didi

android - 微调器内部填充在 Android 6.0.1 上更大

转载 作者:IT老高 更新时间:2023-10-28 23:13:05 28 4
gpt4 key购买 nike

简介:

随着 Android 6.0.1 的新版本,Android 似乎对 Spinner 组件进行了一些更改,因为默认情况下,向下胡萝卜周围的内部填充有点大。

我在一个应用程序上注意到了这一点,我没有修改任何代码,只是更新了设备上的操作系统,但微调器的大小不同。

情况:

我在 RelativeLayout 中有 2 个微调器,一个挨着一个(请注意其余组件,我添加了所有内容,以便您可以看到这部分布局 - 删除了完全不必要的属性或 View 身份证)

<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>

getView() 方法的 Spinner 适配器使用的布局是这样的:

<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 个单独的屏幕截图组合而成:

  1. 顶部是在运行 Android 6.0
  2. Nexus 5 设备上拍摄的
  3. 下面的图片也是在 Nexus 5 设备上拍摄的,但在 Android 6.0.1
  4. 上运行

screenshot

  • 编辑 1

使用支持库中的 AppCompatSpinner 不会改变行为。使用的支持库版本是 23.1.1

最佳答案

通过为微调器构建自定义背景,我能够以最小的努力解决此问题。

使用 AppCompatSpinner 我必须为背景创建 2 个 xml,我们称之为 spinner_background.xml:

1.第一个进入drawable文件夹,如下所示,spinner_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="transparent">
<item
android:width="24dp"
android:height="24dp"
android:drawable="@drawable/selector_background_borderless"
android:gravity="end|center_vertical" />
<item android:drawable="@drawable/bg_spinner_anchor" />
</layer-list>

selector_background_borderless 是一个普通的选择器,例如(我添加了您需要的最少项目,您可以探索它是 v21+ 的波纹替代方案。事实上我建议您这样做):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#19000000" android:state_pressed="true" />
<item android:drawable="@android:color/transparent" />
</selector>

bg_spinner_anchor 是插入符号的 9patch PNG。我使用了这些 Assets :bg_spinner_anchor

2.第二个进入drawable-v23文件夹以正确支持波纹,看起来像这样,spinner_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingEnd="16dp"
android:paddingLeft="0dp"
android:paddingMode="stack"
android:paddingRight="0dp"
android:paddingStart="0dp">
<item
android:width="24dp"
android:height="24dp"
android:drawable="@drawable/selector_background_borderless"
android:gravity="end|center_vertical" />

<item
android:width="24dp"
android:height="24dp"
android:drawable="@drawable/ic_spinner_caret"
android:gravity="end|center_vertical" />
</layer-list>

其中 ic_spinner_caret 是从 Android 源代码中使用的向量,如下所示。您还应该将其添加到您的 drawable-v23 文件夹中:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?attr/colorControlNormal">
<path
android:pathData="M7,10l5,5,5-5z"
android:fillColor="#524e4a"/>
</vector>

学分转到 alanv来自用于 Guidance 的 Android UI 工具包!

关于android - 微调器内部填充在 Android 6.0.1 上更大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34316074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com