11

スピナーポップアップの背景色を設定しようとしていますが、試したすべてが正しく機能しませんでした。

これはスピナーコントロールです:

<Spinner
  android:id="@+id/myspinner"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="@null"
  android:drawSelectorOnTop="true" />

クリックすると背景が白のポップアップが表示されるので、変更したいのですが。

ポップアップを作成するために使用するxml行は次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/list_selector"      
  android:paddingBottom="@dimen/padding_medium"
  android:layout_marginBottom="@dimen/padding_medium"
  android:orientation="vertical">
  
  ..........

</RelativeLayout>

および描画可能な背景list_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
  <!-- Pressed -->
  <item 
    android:state_pressed="true" 
    android:drawable="@color/green" /> <!--  @drawable/tab_press -->

  <!-- Selected -->
  <item 
    android:state_selected="true" 
    android:drawable="@color/green" /> <!--  @drawable/tab_press -->
 
</selector> 

上記のxmlにデフォルトの状態を追加することは問題ありませんが、スピナーのメインコントロールはその背景色でアイテムを表示するので、それは望ましくありません。

私が試したもう1つのことは、styles.xmlでアプリケーションの背景色を黒に設定することです。

<style name="AppTheme" parent="android:Theme.Light">
     <item name="android:background">#000000</item>
     <item name="android:textColor">#FFFFFF</item>
     <item name="android:typeface">sans</item> 
</style>

これもポップアップの背景を上書きしますが、望ましくない付随的な影響があります。これを簡単な方法で達成する方法はありますか?

PS:APIレベル10(2.3.3)を使用していますが、属性android:popupBackgroundが存在しません。

4

4 に答える 4

8

xmlのスピナー宣言でandroid:popupBackground = "@ drawable/Yourxmlfile.xml"を使用します。

たとえば

    <Spinner
        android:id="@+id/spinner3"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:layout_weight="50"
        android:background="@drawable/gradient_spinner"
        android:gravity="center"
        android:paddingLeft="40dp"
        android:popupBackground="@drawable/radialfront"
        >
于 2015-07-01T13:38:45.570 に答える
6

上記の解決策はどれも私にはうまくいきませんでした。

解決策は、スピナーに渡されたアダプターにgetDropDownViewメソッドの別の実装を書き込んで、カスタムカラーで別のレイアウトを表示することでした。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vista = convertView;       

    // layout for spinner widget

    if (vista==null) {
        LayoutInflater inflater = actividad.getLayoutInflater();
        vista = inflater.inflate(R.layout.fila_colores_spinner, null);                  
    }

    return vista;
}

@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
    View vista = convertView;       

    //layout for spinner popup

    if (vista==null) {
        LayoutInflater inflater = actividad.getLayoutInflater();
        vista = inflater.inflate(R.layout.fila_colores_spinner_popup, null);                    
    }

    return vista;
}
于 2013-03-29T19:09:33.777 に答える
2

それは素晴らしい働きをします!

  • 必要な色(および変更するその他の属性)を使用してテキストビューでレイアウトを宣言します
  • textViewのIDはtext1である必要があります(これは、スピナーのR.androidのデフォルトレイアウトで宣言されているIDであるため)
  • スピナーアダプターでこのレイアウトを指定します

例えば:

  • res \ layout \ custom_spinner_item.xmlに次のように入力します:

    TextView xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@android:id/text1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#B2B5B7"
                    android:gravity="center_horizontal"
                     android:textSize="20dp"
    

次に、このレイアウトをアダプターに渡します。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      MyActivity.this,
      R.layout.custom_spinner_item, strings);
  • 次に、このアダプターをスピナーに渡します
于 2013-06-05T07:54:54.970 に答える
0
  <Spinner
      android:id="@+id/myspinner"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/list_selector"      
      android:drawSelectorOnTop="true" />

これを試して..

于 2013-02-27T04:44:17.413 に答える