欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Spinner在Dialog中的使用效果实例代码详解

程序员文章站 2023-11-05 22:48:52
背景: 记得很久以前,碰到一个需求场景,需要在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,感觉效果也不是特别让人满意。

截张图:

 Spinner在Dialog中的使用效果实例代码详解

在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中的使用效果实例代码详解

总结

以上所述是小编给大家介绍的spinner在dialog中的使用效果实例代码详解,希望对大家有所帮助