Стиль прокрутки Spinner

Я попытался изменить стиль и положение полосы прокрутки, которая находится внутри счетчика, но это не сработает.

MainActivity.java:

package com.example.testapp; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

activity_main.xml:

 <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"> <Spinner android:entries="@array/items" android:verticalScrollbarPosition="left" android:scrollbarThumbVertical="@drawable/scrollbar_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout> 

рисуем / scrollbar_style.xml:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#FF196C96" /> <corners android:radius="5dp" /> <size android:width="2dp" /> </shape> 

Значения / strings.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TestApp</string> <string name="action_settings">Settings</string> <string-array name="items"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> <item>Item 4</item> <item>Item 5</item> <item>Item 6</item> <item>Item 7</item> <item>Item 8</item> <item>Item 9</item> <item>Item 10</item> </string-array> </resources> 

AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testapp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.testapp.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Скриншот:

Введите описание изображения здесь

Обратите внимание, что android:verticalScrollbarPosition="left" и android:scrollbarThumbVertical="@drawable/scrollbar_style" отлично работает, если я использую их с ListView :

Введите описание изображения здесь

Это ошибка? Или есть ли другой способ манипулировать стилем и полосой прокрутки в Spinner ?

Spinners в Android не имеет полосы прокрутки, полоса прокрутки существует в спискеView, поддерживаемом внутри Spinner, и не имеет открытого доступа.

Есть способ переустановки в ссылке ниже.

Ресурс: https://stackoverflow.com/a/12644532/2128327

После нескольких часов работы я получил правильное решение (спасибо Халеду за то, что он направил меня в правильном направлении). Вам нужен специальный счетчик:

 import java.lang.reflect.Field; import java.lang.reflect.Method; import org.holoeverywhere.widget.ListPopupWindow; import org.holoeverywhere.widget.ListView; import org.holoeverywhere.widget.Spinner; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; public class CustomSpinner extends Spinner { public CustomSpinner(Context context) { super(context); } public CustomSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public CustomSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public CustomSpinner(Context context, AttributeSet attrs, int defStyle, int mode) { super(context, attrs, defStyle, mode); } public CustomSpinner(Context context, int mode) { super(context, mode); } @Override public boolean performClick() { boolean bClicked = super.performClick(); try { Field mPopupField = Spinner.class.getDeclaredField("mPopup"); mPopupField.setAccessible(true); ListPopupWindow pop = (ListPopupWindow) mPopupField.get(this); ListView listview = pop.getListView(); Field mScrollCacheField = View.class.getDeclaredField("mScrollCache"); mScrollCacheField.setAccessible(true); Object mScrollCache = mScrollCacheField.get(listview); Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar"); scrollBarField.setAccessible(true); Object scrollBar = scrollBarField.get(mScrollCache); Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class); method.setAccessible(true); method.invoke(scrollBar, getResources().getDrawable(R.drawable.scrollbar_style)); if(VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { Field mVerticalScrollbarPositionField = View.class.getDeclaredField("mVerticalScrollbarPosition"); mVerticalScrollbarPositionField.setAccessible(true); mVerticalScrollbarPositionField.set(listview, SCROLLBAR_POSITION_LEFT); } } catch(Exception e) { e.printStackTrace(); } return bClicked; } } 

Обратите внимание, что я использовал библиотеку HoloEveryWhere, но такое же решение будет работать с android.widget.Spinner .