Spinner在Dialog中的使用效果实例代码详解
程序员文章站
2023-12-01 21:14:28
背景:
记得很久以前,碰到一个需求场景,需要在android dialog中显示spinner,用来进行选择操作。那个时候还很困惑,不知道是否可以这么搞。抱着试试看的心态...
背景:
记得很久以前,碰到一个需求场景,需要在android dialog中显示spinner,用来进行选择操作。那个时候还很困惑,不知道是否可以这么搞。抱着试试看的心态,做起了实验,看起来效果还可行,不过最终还是选用了一个开源项目,效果看起来更棒。
代码演示:
spinner在dialog中的使用,dialog中关于view的xml布局。
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginbottom="2dp" /> <edittext android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" /> </linearlayout>
dialog初始化,加载,显示出来的完整代码(包含对spinner进行adapter设置)。
private void showalertdialog() { view view = layoutinflater.from(this).inflate(r.layout.dialog_add_notebook, null); spinner spinner = view.findviewbyid(r.id.spinner); arrayadapter<string> arrayadapter = new arrayadapter<>(this, r.layout.simple_spinner_item, android.r.id.text1, categories); spinner.setadapter(arrayadapter); spinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { toast.maketext(mainactivity.this, "选中的分类是: " + categories.get(position), toast.length_long).show(); } @override public void onnothingselected(adapterview<?> parent) { } }); new alertdialog.builder(this) .settitle("提示") .setview(view) .setpositivebutton(android.r.string.ok, new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { dialog.dismiss(); } }) .show(); }
只能说spinner在dialog中,显示出来的效果一般般,即使通过自定义item布局,调整padding,感觉效果也不是特别让人满意。
截张图:
在github上找到一个不错的项目,https://github.com/lesilva/betterspinner。
修改代码,替换为betterspinner。
在app/build.gradle中添加
compile ‘com.weiwangcn.betterspinner:library:1.1.0'
xml布局文件修改为:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <com.weiwangcn.betterspinner.library.material.materialbetterspinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginbottom="@dimen/activity_vertical_margin" android:hint="@string/notebook_choose_notebook_hint" /> <edittext android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" /> </linearlayout>
显示dialog的方法调整为
public void onclickedaddnotebook(final string parentnotebookid, list<notebook> notebooks) { view view = layoutinflater.from(mactivity).inflate(r.layout.dialog_add_notebook, null); final edittext medit = (edittext) view.findviewbyid(r.id.edit); final materialbetterspinner spinner = (materialbetterspinner) view.findviewbyid(r.id.spinner); final list<notebook> tempnotebooks = new arraylist<>(); tempnotebooks.clear(); tempnotebooks.addall(notebooks); notebook rootnotebook = new notebook(); rootnotebook.settitle(mactivity.getstring(r.string.notebook_default_root_notebook_title)); tempnotebooks.add(0, rootnotebook); spinnerarrayadapter<notebook> adapter = new spinnerarrayadapter<notebook>(view.getcontext(), tempnotebooks) { @override public string itemtostring(notebook item) { return item.gettitle(); } }; spinner.setadapter(adapter); spinner.settext(rootnotebook.gettitle()); new alertdialog.builder(mactivity) .settitle(r.string.add_notebook) .setview(view) .setpositivebutton(r.string.confirm, new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { dialog.dismiss(); addnotebook(medit.gettext().tostring(), getnotebookid(tempnotebooks, spinner.gettext().tostring())); } }) .show(); }
细微之处的api有所变化,用法大多差不多,看一下最终的预览效果,觉得还是挺materialdesign风的。
总结
以上所述是小编给大家介绍的spinner在dialog中的使用效果实例代码详解,希望对大家有所帮助