左侧带箭头的微调器
Spinner with arrow in left
我正在为 RTL 语言开发一个应用程序,想将箭头的位置更改为 Spinner 的左侧!
有没有办法在不创建自定义微调器的情况下做到这一点?
您必须编写自定义微调器。
示例代码如下。您可以随意编辑。
<Spinner
style="@style/spinner_style"
android:layout_width="match_parent"
android:layout_height="wrap content"
/>
@style/spinner_style:
<style name="spinner_style">
<item name="android:background">@drawable/background_spinner</item>
</style>
@drawable/background_spinner
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item><layer-list>
<item><shape>
<solid android:color="@android:color/white" />
<corners android:radius="4dp" />
<padding android:left="8dp"/>
</shape></item>
<item><bitmap android:gravity="left"
android:src="@drawable/ic_arrow_drop_down_grey600_36dp"/>
</item>
</layer-list></item>
</selector>
在左侧设置箭头的简单方法是,您必须在可绘制文件夹中创建 .xml 文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorWhite" />
</shape>
</item>
<item
android:drawable="@drawable/ic_arrow_drop_down_black_24dp"
android:right="320dp"/>
</layer-list>
您可以根据需要调整以上代码。
并将此文件设置为微调器小部件的背景,如下所示:
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/layout_spinner"
android:background="@drawable/arrow_left"
android:elevation="5dp"/>
dummy.xml(可绘制对象的尺寸应非常小 - 24dp)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list android:opacity="transparent">
<item android:width="100dp" android:end="300dp">
<bitmap android:src="@drawable/down_button_dummy_dummy" android:gravity="center"/>
</item>
</layer-list>
</item>
</selector>
布局文件片段
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
app:cardElevation="5dp"
>
<Spinner
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/dummy">
</Spinner>
</android.support.v7.widget.CardView>
Click here for rendered layout
这对我来说很有效。我的应用程序中有英语和阿拉伯语
<Spinner
android:textDirection="locale"
android:id="@+id/spnGender"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/array_gender"/>
这个属性很重要。
android:textDirection="locale"
注意:我使用的是默认微调器,没有进行任何自定义设置。
这个呢?
首先确保您在 AndroidManifest.xml
中启用了 rtl 支持
<application
...
android:supportsRtl="true"
...>
之后在您的 Spinner 定义中使用它:
android:layoutDirection="rtl"
android:textDirection="rtl"
在可绘制文件夹中创建一个 .xml:@drawable/spinner_arrow.xml
<item>
<layer-list>
<item>
<shape>
<gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" />
<stroke android:width="1dp" android:color="#ECF0F1" />
<corners android:radius="5dp" />
<padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
</shape>
</item>
<item android:width="24dp" android:height="24dp" android:gravity="end|center_vertical" android:drawable="@drawable/ic_keyboard_arrow_down_black_24dp" />
</layer-list>
</item>
- 然后将其添加到 styles.xml
<style name="spinner_style">
<item name="android:background">@drawable/spinner_arrow</item>
</style>
然后将其添加到 微调器
style="@style/spinner_style"
最简单的方法:在Spinner中设置'layoutDirection'= 'rtl'
我正在为 RTL 语言开发一个应用程序,想将箭头的位置更改为 Spinner 的左侧! 有没有办法在不创建自定义微调器的情况下做到这一点?
您必须编写自定义微调器。 示例代码如下。您可以随意编辑。
<Spinner
style="@style/spinner_style"
android:layout_width="match_parent"
android:layout_height="wrap content"
/>
@style/spinner_style:
<style name="spinner_style">
<item name="android:background">@drawable/background_spinner</item>
</style>
@drawable/background_spinner
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item><layer-list>
<item><shape>
<solid android:color="@android:color/white" />
<corners android:radius="4dp" />
<padding android:left="8dp"/>
</shape></item>
<item><bitmap android:gravity="left"
android:src="@drawable/ic_arrow_drop_down_grey600_36dp"/>
</item>
</layer-list></item>
</selector>
在左侧设置箭头的简单方法是,您必须在可绘制文件夹中创建 .xml 文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorWhite" />
</shape>
</item>
<item
android:drawable="@drawable/ic_arrow_drop_down_black_24dp"
android:right="320dp"/>
</layer-list>
您可以根据需要调整以上代码。 并将此文件设置为微调器小部件的背景,如下所示:
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/layout_spinner"
android:background="@drawable/arrow_left"
android:elevation="5dp"/>
dummy.xml(可绘制对象的尺寸应非常小 - 24dp)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list android:opacity="transparent">
<item android:width="100dp" android:end="300dp">
<bitmap android:src="@drawable/down_button_dummy_dummy" android:gravity="center"/>
</item>
</layer-list>
</item>
</selector>
布局文件片段
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
app:cardElevation="5dp"
>
<Spinner
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/dummy">
</Spinner>
</android.support.v7.widget.CardView>
Click here for rendered layout
这对我来说很有效。我的应用程序中有英语和阿拉伯语
<Spinner
android:textDirection="locale"
android:id="@+id/spnGender"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/array_gender"/>
这个属性很重要。
android:textDirection="locale"
注意:我使用的是默认微调器,没有进行任何自定义设置。
这个呢? 首先确保您在 AndroidManifest.xml
中启用了 rtl 支持<application
...
android:supportsRtl="true"
...>
之后在您的 Spinner 定义中使用它:
android:layoutDirection="rtl"
android:textDirection="rtl"
在可绘制文件夹中创建一个 .xml:@drawable/spinner_arrow.xml
<item>
<layer-list>
<item>
<shape>
<gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" />
<stroke android:width="1dp" android:color="#ECF0F1" />
<corners android:radius="5dp" />
<padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
</shape>
</item>
<item android:width="24dp" android:height="24dp" android:gravity="end|center_vertical" android:drawable="@drawable/ic_keyboard_arrow_down_black_24dp" />
</layer-list>
</item>
- 然后将其添加到 styles.xml
<style name="spinner_style">
<item name="android:background">@drawable/spinner_arrow</item>
</style>
然后将其添加到 微调器
style="@style/spinner_style"
最简单的方法:在Spinner中设置'layoutDirection'= 'rtl'