Estilo de la barra de desplazamiento de Spinner

He intentado cambiar el estilo y la posición de la barra de desplazamiento que está dentro de una ruleta, pero no funciona.

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> 

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

Values ​​/ 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> 

Captura de pantalla:

Introduzca aquí la descripción de la imagen

Tenga en cuenta que android:verticalScrollbarPosition="left" and android:scrollbarThumbVertical="@drawable/scrollbar_style" funciona bien si los uso con ListView :

Introduzca aquí la descripción de la imagen

¿Es un error? O hay otra manera de manipular el estilo y la posición de la barra de desplazamiento dentro de un Spinner ?

Spinners en Android no tiene una barra de desplazamiento, la barra de desplazamiento existe dentro del listView mantenido dentro del Spinner, y no tiene acceso público.

Hay una forma en tiempo de ejecución para anularla en el enlace de abajo.

Recurso: https://stackoverflow.com/a/12644532/2128327

Después de horas de trabajo, conseguí la solución correcta (gracias Khaled por guiarme a la dirección correcta). Necesita un spinner personalizado:

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

Tenga en cuenta que he usado HoloEveryWhere biblioteca, pero la misma solución funcionaría con android.widget.Spinner .

  • Android JobScheduler se ejecuta varias veces
  • Sincronización de dos ListViews lado a lado de Android
  • Android: Cómo obtener valores de la selección de fecha y hora
  • Obtención de excepción de conversión de clase durante el uso de android.support.v7.widget.SearchView
  • Error instalando java en ubuntu 10 64bit
  • No hay ningún menú Ejecutar o botón de barra de herramientas en Eclipse Juno
  • Serialización y des-serialización de android.graphics.Bitmap en Java
  • ¿Hay alguna forma de desactivar javadoc se bloquea en Android Studio con Maven plugin?
  • Desactivar el selector Android ListView
  • ¿Cómo llegar a editar evento en el calendario a través de código de programación?
  • Faltan credenciales de autenticación de Twitter4j
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.