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:
- Android GoogleAPIClient - NoClassDefFoundError: com / google / android / gms / interno / zzsa
- Imagen seleccionada de gallary no va a establecer en ImageView
- Archivo de descarga de Android de problemas de memoria
- Aleatoria y temporal
- 2d problema de colisión de la bola: no hay conservación de la energía
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:
Tenga en cuenta que android:verticalScrollbarPosition="left"
and android:scrollbarThumbVertical="@drawable/scrollbar_style"
funciona bien si los uso con ListView
:
¿Es un error? O hay otra manera de manipular el estilo y la posición de la barra de desplazamiento dentro de un Spinner
?
- ¿Javax.crypto trabaja diferentemente en diversas versiones de OS androide?
- String establecida en ArrayList?
- ¿Qué hay en scala-android.jar?
- MotionEvent.ACTION_UP no funciona
- Subclase de JavaScript en Parse.com
- Serialice una matriz de ints para enviar usando KSOAP2
- Cordova No se pudo reservar espacio suficiente para 2097152KB objeto montón
- JSON Array iteration en Android / Java
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.
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
.
- Proguard no puede encontrar el método referenciado 'void allowCoreThreadTimeOut (boolean)'
- Eclipse: java.lang.NoClassDefFoundError para clases JDK en un proyecto de Android