第一张图片显示未选中时的微调器。
当选择微调器时,我想改变它的样式,使其看起来如下图所示。
答案 0 :(得分:0)
我想上面没有这样的直接方法。但您可以采用布局,将图像设置为背景。在该布局上获取imageview&在该布局的点击监听器上更改箭头图像&同时显示listview点击该布局&双击使列表视图不可见。
见下文:
布局(具有背景图像) - > Imageview(箭头/ s) - >弹出列表视图 - >使其可见/不可见
答案 1 :(得分:0)
您需要在布局XML文件上使用android:spinnerSelector,然后检查 this!
答案 2 :(得分:0)
很久以前,您曾经能够指定android:spinnerSelector
property for Spinners,但不幸的是,该属性已被删除,并且不再适用。
不幸的是,唯一的另一种方法(AFAIK)是扩展Spinner
类。这是因为为了按照您想要的方式更改背景,您需要确定是否打开或关闭Spinner。没有内置方法可以检测到这一点,因此您需要将其构建为自定义Spinner类。
在自定义微调器类中,您将检测何时按下并打开微调器,以及通过取消对话框或选择项目来关闭对话框。
我在写这个答案时大量提到了following answer(复制粘贴了很多代码然后修改它供你使用)。请参考它。我通过消除使用监听器界面来改变了这个答案,因为你不在乎知道点击何时发生,你只想要改变背景。如果您想在活动中使用该信息,请重新添加监听器。
首先,在新文件CustomSpinner.java
public class CustomSpinner extends Spinner {
private boolean mOpenInitiated = false;
// the Spinner constructors
// add all the others too, I'm just putting one here for simplicity sake
public CustomSpinner(Context context){
super(context);
setBackgroundResource(R.drawable.CLOSE_SPINNER_DRAWABLE);
}
@Override
public boolean performClick() {
// register that the Spinner was opened so we have a status
// indicator for the activity(which may lose focus for some other
// reasons)
mOpenInitiated = true;
setBackgroundResource(R.drawable.OPENED_SPINNER_DRAWABLE);
return super.performClick();
}
/**
* Propagate the closed Spinner event to the listener from outside.
*/
public void performClosedEvent() {
mOpenInitiated = false;
setBackgroundResource(R.drawable.CLOSED_SPINNER_DRAWABLE);
}
/**
* A boolean flag indicating that the Spinner triggered an open event.
*
* @return true for opened Spinner
*/
public boolean hasBeenOpened() {
return mOpenInitiated;
}
}
在您的Activity中创建自定义微调器(可能在onCreate中),并覆盖onWindowFocusChanged以告诉微调器取消通知您关闭事件(如果它已打开)。
CustomSpinner mSpin;
@Override
public void onCreate(Bundle savedInstanceState){
// Do all your initialization stuff
mSpin = (CustomSpinner) findViewById(R.id.myCustomSpinner);
// shouldn't need this if you are setting initial background in the constructors
mSpin.setBackgroundResource(R.drawable.CLOSED_SPINNER_DRAWABLE);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
// mSpin is our custom Spinner
if (mSpin.hasBeenOpened() && hasFocus) {
mSpin.performClosedEvent();
}
}
此微调器的xml资源将如下所示(注意:我只向此XML文件添加了几个参数,由于没有宽度,高度或对齐参数,它肯定不完整。)
<com.packagename.CustomSpinner
android:id="@+id/myCustomSpinner"
/>
希望这有所帮助,对不起,这太复杂了。我可能已经查看了一个更简单的解决方案,但我进行了广泛的搜索,无法找到任何正常工作的内容。