Android 我的微调器视图具有从其父视图获取的高程阴影
我有一个线性布局和两个孩子:一个TextView和一个Spinner。LinearLayout获取了我在style.xml文件中定义的主题,它有一个高程值来创建阴影。但是,由于某些原因,微调器也会得到阴影。它似乎是从它的母公司那里得到的。如果我从LinearLayout父级中删除android:theme属性,则布局和微调器上的阴影都会消失 这是怎么回事?我希望我的旋转器没有阴影 此外,如果我为微调器创建一个自定义主题,并将标高设置为0dp,这将消除阴影,但微调器会遇到其他布局问题。我知道我做错了什么 这是我的密码 布局部分:Android 我的微调器视图具有从其父视图获取的高程阴影,android,android-layout,android-spinner,android-theme,android-elevation,Android,Android Layout,Android Spinner,Android Theme,Android Elevation,我有一个线性布局和两个孩子:一个TextView和一个Spinner。LinearLayout获取了我在style.xml文件中定义的主题,它有一个高程值来创建阴影。但是,由于某些原因,微调器也会得到阴影。它似乎是从它的母公司那里得到的。如果我从LinearLayout父级中删除android:theme属性,则布局和微调器上的阴影都会消失 这是怎么回事?我希望我的旋转器没有阴影 此外,如果我为微调器创建一个自定义主题,并将标高设置为0dp,这将消除阴影,但微调器会遇到其他布局问题。我知道我做错
<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):
6dp
用选项填充微调器的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);
String[]spinnerItems=新字符串[]{
“你好”,
“我爱你”,
“这是一个测试”
};
calendarSpinner=(Spinner)findViewById(R.id.calendarSpinner);
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u微调器项目,微调器项目);
adapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
calendarSpinner.setAdapter(适配器);
以下是它在设备上的外观:
现在,如果我向微调器添加自定义主题
<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>
0dp
样式父级(AppTheme.SpinnerBase):
以下是我的结论:
微调器下拉列表的右侧有一条线和一个微调器箭头 在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格式放置这样的元素将导致所有未识别参数后面的参数都将被忽略,因此不要将其作为第一个参数。我肯定会继续使用它。我害怕在xml中直接使用它,以免在旧设备上出错。但如果它被忽视了,我的担心就会减轻!@ThMBc提供的解决方案似乎可以纠正出现的阴影。但是,有人能解释为什么微调器视图投射阴影,即使它本身没有高程值吗?第一个示例中的高程:视图在xml中声明时使用父视图的样式进行膨胀:因为您声明了高程,所以它得到了高程。选择器本身的提升是因为它是一个新的“窗口”,一个对话框或弹出窗口,在它自己的生命周期中,默认实现显示阴影,甚至在Kitkat和更早的版本上
<style name="AppTheme.SpinnerBase" parent="Widget.AppCompat.Spinner.Underlined">
</style>
<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"/>