1

TextView と Spinner の 2 つの子を持つ LinearLayout があります。style.xml ファイルで定義したテーマを取得した LinearLayout には、影を作成するための高さの値があります。しかし、なぜかスピナーにも影ができてしまいます。親から取得しているようです。LinearLayout の親から android:theme プロパティを削除すると、レイアウトとスピナーの両方の影が消えます。

ここで何が起こっているのですか?スピナーに影がないようにしたいと思います。

また、Spinner のカスタム テーマを作成して高さを 0dp に設定すると、影はなくなりますが、Spinner は他のレイアウトの問題に遭遇します。私はここで何か間違ったことをしていることを知っています...

これが私のコードです。

レイアウト セクション:

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:background="@drawable/section_background"
            android:orientation="vertical"
            android:theme="@style/AppTheme.Section">

            <TextView
                android:id="@+id/titleCalendar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:text="Calendar"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textStyle="bold" />

            <Spinner
                android:id="@+id/calendarSpinner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginRight="20dp"
                android:layout_marginLeft="20dp"/>
        </LinearLayout>

LinearLayout のテーマ (@style/AppTheme.Section):

        <style name="AppTheme.Section">
            <item name="android:elevation">6dp</item>
        </style>

Spinner にオプションを入力する Java コード:

     String[] spinnerItems = new String[]{
            "Hello",
            "I Love You",
            "This is a Test"
    };

    calendarSpinner = (Spinner) findViewById(R.id.calendarSpinner);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems);
    adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
    calendarSpinner.setAdapter(adapter);

デバイスでの表示は次のとおりです。

ここに画像の説明を入力

ここで、Spinner にカスタム テーマを追加すると...

<Spinner
     android:id="@+id/calendarSpinner"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginBottom="10dp"
     android:layout_marginRight="20dp"
     android:layout_marginLeft="20dp"
     android:theme="@style/SpinnerTheme"/>

スタイル:

 <style name="SpinnerTheme" parent="AppTheme.SpinnerBase">
      <item name="android:elevation">0dp</item>
 </style>

スタイルの親 (AppTheme.SpinnerBase):

 <style name="AppTheme.SpinnerBase" parent="Widget.AppCompat.Spinner.Underlined">
 </style>

これが私が最終的にするものです:

ここに画像の説明を入力


ここに画像の説明を入力

スピナードロップダウンには、右側に線とスピナー矢印があります!

4

1 に答える 1

3

xml レイアウト内では、標高を 0 に設定することもできます。

 <Spinner
 android:id="@+id/calendarSpinner"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginBottom="10dp"
 android:layout_marginRight="20dp"
 android:layout_marginLeft="20dp"
 android:elevation="0dp"/>

要素が認識されない場合、以前のバージョンの android では無視されます。一部のデバイスでは、このような要素を xml に配置すると、認識されない引数に続くすべての引数が無視されることに注意してください。最初の引数として配置しないでください。

于 2015-07-17T08:20:44.783 に答える