Doalog:
- Dialog基本方法:
- setPrompt:设置标题文字。
- setAdapter:设置下拉列表的适配器。
- setSelection:设置当前选中哪项。注意该方法要在setAdapter方法之后调用。
- setOnItemSelectedListener:设置下拉列表的选择监听器,该监听器要实现接口OnItemSelectedListener
-
spinner的用法:
- 通过xml文件加载(静态)
- 通过java代码加载(动态)
- 通过xml文件加载(静态)
- 通过XML文件静态加载
- 文件位置:res/values/String.xml
-
在xml布局文件中的android:entries=“country_array”使用 <resources> <string name="app_name">选择一个国家</string> <string name="country_prompt">Choose a country</string> <string-array name="country_arrays"> <item>China</item> <item>United States</item> <item>Indonesia</item> <item>France</item> <item>Italy</item> <item>Singapore</item> <item>New Zealand</item> <item>India</item> </string-array> 定义完以后,在xml布局文件中使用 使用的方法为: <LinearLayout> <Spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/country_arrays" android:prompt="@string/country_prompt" /> </LinearLayout>
-
- 文件位置:res/values/String.xml
- 通过java代码实现动态加载(需要使用ArrayAdapter适配器)
- 在xml布局文件中
-
<Spinner android:layout_width="200dp" android:id="@+id/spinner" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:spinnerMode="dropdown" android:dropDownVerticalOffset="45dp" android:background="@null"/>
-
- 在java代码中:
- 在xml布局文件中
-
首先需要一个一个数组用来存放下拉列表需要展示的内容 private String[] starArray = {"金","木","水","火","土"}; 2.声明适配器: ArrayAdapter<String> starAdapter = new ArrayAdapter<String(String为引用的数据的数据类型)> 3. //设置数组适配器的布局样式 starAdapter.setDropDownViewResource(R.layout.item_dropdown); //从布局文件中获取名叫sp_dialog的下拉框 Spinner sp = findViewById(R.id.spinner); //设置下拉框的标题,不设置就没有难看的标题了 sp.setPrompt("请选择行星"); //设置下拉框的数组适配器 sp.setAdapter(starAdapter); //设置下拉框默认的显示第一项 sp.setSelection(0); //给下拉框设置选择监听器,一旦用户选中某一项,就触发监听器的onItemSelected方法 sp.setOnItemSelectedListener(new MySelectedListener());
Dialog对话框基本有以下几种
-
普通对话框
-
AlertDialog dialog = new AlertDialog.Builder(this) .setIcon(R.mipmap.icon)//设置标题的图片 .setTitle("我是对话框")//设置对话框的标题 .setMessage("我是对话框的内容")//设置对话框的内容 //设置对话框的按钮 .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "点击了确定的按钮", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }).create(); dialog.show()
-
-
列表对话框
-
final String items[] = {"我是Item一", "我是Item二", "我是Item三", "我是Item四"}; AlertDialog dialog = new AlertDialog.Builder(this) .setIcon(R.mipmap.icon)//设置标题的图片 .setTitle("列表对话框")//设置对话框的标题 .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create(); dialog.show();
只需要调用
.setItems()
即可,第一个参数即要显示item的数组,第二个参数也就是点击item后的监听事件就很好解决啦
-
-
-
-
单选列表对话框
-
final String items[] = {"我是Item一", "我是Item二", "我是Item三", "我是Item四"}; AlertDialog dialog = new AlertDialog.Builder(this) .setIcon(R.mipmap.icon)//设置标题的图片 .setTitle("单选列表对话框")//设置对话框的标题 .setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create(); dialog.show();
.setSingleChoiceItems(items, 1, listener)
第一个参数:设置单选内容的资源来源;第二个参数:设置默认选中哪一项。
-
-
多选列表对话框
-
final String items[] = {"我是Item一", "我是Item二", "我是Item三", "我是Item四"}; final boolean checkedItems[] = {true, false, true, false}; AlertDialog dialog = new AlertDialog.Builder(this) .setIcon(R.mipmap.icon)//设置标题的图片 .setTitle("多选对话框")//设置对话框的标题 .setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { checkedItems[which] = isChecked; } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { for (int i = 0; i < checkedItems.length; i++) { if (checkedItems[i]) { Toast.makeText(MainActivity.this, "选中了" + i, Toast.LENGTH_SHORT).show(); } } dialog.dismiss(); } }).create(); dialog.show();
同样,和单元对话框一样.setMultiChoiceItems(items, checkedItems, listener)
//第一个参数设置的是你需要单选的内容来源,第二个参数设置的是默认选红的选项,因为是多选,所以可以使用数组来指定
-
-
半自定义对话框
-
半自定义的话我们课时使用.setView函数
View view = getLayoutInflater().inflate(R.layout.half_dialog_view, null); final EditText editText = (EditText) view.findViewById(R.id.dialog_edit); AlertDialog dialog = new AlertDialog.Builder(this) .setIcon(R.mipmap.icon)//设置标题的图片 .setTitle("半自定义对话框")//设置对话框的标题 .setView(view) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String content = editText.getText().toString(); Toast.makeText(MainActivity.this, content, Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }).create(); dialog.show();
需要注意的是:找自己布局中的控件时候经常报NullpointException,原因也很简单就是没有使用加载的布局.findViewbyId();
-
-
自定义对话框
-
<style name="NormalDialogStyle"> <!--对话框背景 --> <item name="android:windowBackground">@android:color/transparent</item> <!--边框 --> <item name="android:windowFrame">@null</item> <!--没有标题 --> <item name="android:windowNoTitle">true</item> <!-- 是否浮现在Activity之上 --> <item name="android:windowIsFloating">true</item> <!--背景透明 --> <item name="android:windowIsTranslucent">false</item> <!-- 是否有覆盖 --> <item name="android:windowContentOverlay">@null</item> <!--进出的显示动画 --> <item name="android:windowAnimationStyle">@style/normalDialogAnim</item> <!--背景变暗--> <item name="android:backgroundDimEnabled">true</item> </style> <!--对话框动画--> <style name="normalDialogAnim" parent="android:Animation"> <item name="@android:windowEnterAnimation">@anim/normal_dialog_enter</item> <item name="@android:windowExitAnimation">@anim/normal_dialog_exit</item> </style>
在java中的实现:
-
private void customDialog() { final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle); View view = View.inflate(this, R.layout.dialog_normal, null); TextView cancel = (TextView) view.findViewById(R.id.cancel); TextView confirm = (TextView) view.findViewById(R.id.confirm); dialog.setContentView(view); //使得点击对话框外部不消失对话框 dialog.setCanceledOnTouchOutside(true); //设置对话框的大小 view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f)); Window dialogWindow = dialog.getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f); lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.gravity = Gravity.CENTER; dialogWindow.setAttributes(lp); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); confirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); }
-
-
-