我的微调器视图具有从其父

时间:2015-07-17 06:46:31

标签: android android-layout android-spinner android-theme android-elevation

我有一个带有两个孩子的LinearLayout:一个TextView和一个Spinner。 LinearLayout获取了我在style.xml文件中定义的主题,它具有一个高程值来创建阴影。但是,出于某种原因,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);

以下是它在设备上的外观:

enter image description here

现在,如果我向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>

以下是我的最终结果:

enter image description here

enter image description here

Spinner下拉列表中有一行和右侧的微调箭头!

1 个答案:

答案 0 :(得分:2)

在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中会导致忽略无法识别的所有参数,因此不要将其作为第一个参数。