1

我有一个带有两个孩子的 LinearLayout:一个 TextView 和一个 Spinner。获得了我在 style.xml 文件中定义的主题的 LinearLayout 具有用于创建阴影的高程值。然而,出于某种原因,Spinner 也出现了阴影。它似乎是从它的父母那里获得的。如果我从 LinearLayout 父级中删除 android:theme 属性,布局和 Spinner 上的阴影就会消失。

这里发生了什么?我希望我的 Spinner 没有阴影。

此外,如果我为 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>

这是我最终的结果:

在此处输入图像描述


在此处输入图像描述

Spinner 下拉菜单在右侧有一条线和一个微调箭头!

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 回答