Chr*_*nes 195
Android M
在Android 6.0中新增,Spinner现在有一个android:popupTheme
参数,允许您设置用于弹出窗口的主题(下拉列表).
您可以这样使用它:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Run Code Online (Sandbox Code Playgroud)
这适用于运行API级别23+的设备,但不适用于运行较低版本Android的设备.
程序兼容性
这就是AppCompat的用武之地.它的Spinner实现也支持popupTheme
,但是要更好地参与其中.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Run Code Online (Sandbox Code Playgroud)
之后,您需要更新适配器才能使用AppCompat.您可以通过实现新ThemedSpinnerAdapter
界面来实现.
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Run Code Online (Sandbox Code Playgroud)
Spinner使用这些方法来告诉适配器哪个主题用于对任何下拉视图进行膨胀.为了使这个变得尽可能简单,我们为您提供了一个Helper
可以插入适配器的类.
这意味着您的适配器变为:
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
private final ThemedSpinnerAdapter.Helper mDropDownHelper;
public MyAdapter(Context context) {
mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
// Inflate the drop down using the helper's LayoutInflater
LayoutInflater inflater = mDropDownHelper.getDropDownViewInflater();
view = inflater.inflate(R.layout.my_dropdown, parent, false);
}
// ...
return view;
}
@Override
public void setDropDownViewTheme(Theme theme) {
mDropDownHelper.setDropDownViewTheme(theme);
}
@Override
public Theme getDropDownViewTheme() {
return mDropDownHelper.getDropDownViewTheme();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23827 次 |
最近记录: |