Android:创建常见对话框以及使用对话框实现登陆
2013-02-26 14:25
459 查看
1、 首先说一下“提示”——Toast
所谓的“提示”就是一种简易的消息提示框,不能被用户单击,根据代码中时间参数的设置,自动消失。
Toast的创建
方法一:makeText (Context context, int resId, int duration)
方法二:makeText(Context context, CharSequence text, int duration)
参数:
第一个参数context表示:toast显示在哪个上下文,通常是当前Activity。
第三个参数duration表示:toast显示的时间。Toast默认有LENGTH_SHORT和LENGTH_LONG两常量,分别表示短时间显示和长时间显示。也可以自己设定时间,注意它的时间单位是:毫秒
对于第二个参数可以是字符串也可以是从资源文件string.xml 里面取得的提示信息 。
2、创建对话框(dialog)
对于对话框的创建以及一些常用的格式,大家可以参考以下的链接
http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html。这篇博客写的很好,对对话框的总结很全面。
下面我在做一个延伸。问题是:弹出一个对话框,对话框有用户名和密码两个文本框,填入正确的用户名和密码然后点击确定进入另一个页面,错误的话提示错误。
下面就针对上面提出的问题开始解决之旅
上面的问题大部分是出现在系统登录时,那么就要求界面尽量的简洁。我要实现的界面如下所示
其实实现这个很简单,先说一下界面吧。这里需要两个Activity页面。其中一个activity_main.xml为空,用来承载对话框(dialog),而另一个login_activity.xml里面包含用户名和密码的输入框。简单点说就是将login_activity.xml镶嵌到dialog中显示。
好了先看一下布局文件
Login_activity.xml
下面是java代码,主要是LoginActivity部分的代码
经过上面就达到了预期的效果。但是还有不足之处:点击对话框之外的地方对话框会消失;如果输入错误给出提示信息之后对话框也会消失,不能继续操作。
先说一下“点击对话框之外的地方对话框会消失”这个问题
其实Android系统中的dialog默认是非模态的,只有设置为模态的才可以解决上述问题。而这个方法也很简单就是.setCancelable(true);将true该false即可解决这个问题。
再来说一下“如果输入错误给出提示信息之后对话框也会消失,不能继续操作”这个问题
这里需要调用对话框的dismiss()方法。
最终的代码如下
所谓的“提示”就是一种简易的消息提示框,不能被用户单击,根据代码中时间参数的设置,自动消失。
Toast的创建
方法一:makeText (Context context, int resId, int duration)
方法二:makeText(Context context, CharSequence text, int duration)
参数:
第一个参数context表示:toast显示在哪个上下文,通常是当前Activity。
第三个参数duration表示:toast显示的时间。Toast默认有LENGTH_SHORT和LENGTH_LONG两常量,分别表示短时间显示和长时间显示。也可以自己设定时间,注意它的时间单位是:毫秒
对于第二个参数可以是字符串也可以是从资源文件string.xml 里面取得的提示信息 。
// 创建toast对象,并显示.第二个参数是字符串 Toast.makeText(MainActivity.this, "这是提示信息", Toast.LENGTH_LONG).show(); //第二个参数是从资源文件string.xml 里面取提示信息 Toast.makeText(MainActivity.this,getString(R.string.hello) , Toast.LENGTH_SHORT).show();
2、创建对话框(dialog)
对于对话框的创建以及一些常用的格式,大家可以参考以下的链接
http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html。这篇博客写的很好,对对话框的总结很全面。
下面我在做一个延伸。问题是:弹出一个对话框,对话框有用户名和密码两个文本框,填入正确的用户名和密码然后点击确定进入另一个页面,错误的话提示错误。
下面就针对上面提出的问题开始解决之旅
上面的问题大部分是出现在系统登录时,那么就要求界面尽量的简洁。我要实现的界面如下所示
其实实现这个很简单,先说一下界面吧。这里需要两个Activity页面。其中一个activity_main.xml为空,用来承载对话框(dialog),而另一个login_activity.xml里面包含用户名和密码的输入框。简单点说就是将login_activity.xml镶嵌到dialog中显示。
好了先看一下布局文件
Login_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tvuserName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="18dp" android:layout_marginTop="44dp" android:text="用户名:" /> <EditText android:id="@+id/etuserName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/tvuserName" android:layout_alignBottom="@+id/tvuserName" android:layout_marginLeft="56dp" android:layout_toRightOf="@+id/tvuserName" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/tvPWD" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/tvuserName" android:layout_below="@+id/etuserName" android:layout_marginTop="42dp" android:text="密码:" /> <EditText android:id="@+id/etPWD" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/tvPWD" android:layout_alignParentRight="true" android:ems="10" /> </RelativeLayout>
下面是java代码,主要是LoginActivity部分的代码
package com.example.testofdialog; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class LoginActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); showWaiterAuthorizationDialog() ; } //显示对话框 public void showWaiterAuthorizationDialog() { //LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化 LayoutInflater factory = LayoutInflater.from(LoginActivity.this); //把activity_login中的控件定义在View中 final View textEntryView = factory.inflate(R.layout.activity_login, null); //将LoginActivity中的控件显示在对话框中 new AlertDialog.Builder(LoginActivity.this) //对话框的标题 .setTitle("登陆") //设定显示的View .setView(textEntryView) //对话框中的“登陆”按钮的点击事件 .setPositiveButton("登陆", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //获取用户输入的“用户名”,“密码” //注意:textEntryView.findViewById很重要,因为上面factory.inflate(R.layout.activity_login, null)将页面布局赋值给了textEntryView了 final EditText etUserName = (EditText)textEntryView.findViewById(R.id.etuserName); final EditText etPassword = (EditText)textEntryView.findViewById(R.id.etPWD); //将页面输入框中获得的“用户名”,“密码”转为字符串 String userName = etUserName.getText().toString().trim(); String password = etPassword.getText().toString().trim(); //现在为止已经获得了字符型的用户名和密码了,接下来就是根据自己的需求来编写代码了 //这里做一个简单的测试,假定输入的用户名和密码都是1则进入其他操作页面(OperationActivity) if(userName.equals("1") && password.equals("1")){ //跳转到OperationActivity Intent intent = new Intent(); intent.setClass(LoginActivity.this, OperationActivity.class); startActivity(intent); //关闭当前页面 LoginActivity.this.finish(); }else{ Toast.makeText(LoginActivity.this, "密码或用户名错误", Toast.LENGTH_SHORT).show(); } } }) //对话框的“退出”单击事件 .setNegativeButton("退出", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { LoginActivity.this.finish(); } }) //对话框的创建、显示 .create().show(); } }
经过上面就达到了预期的效果。但是还有不足之处:点击对话框之外的地方对话框会消失;如果输入错误给出提示信息之后对话框也会消失,不能继续操作。
先说一下“点击对话框之外的地方对话框会消失”这个问题
其实Android系统中的dialog默认是非模态的,只有设置为模态的才可以解决上述问题。而这个方法也很简单就是.setCancelable(true);将true该false即可解决这个问题。
再来说一下“如果输入错误给出提示信息之后对话框也会消失,不能继续操作”这个问题
这里需要调用对话框的dismiss()方法。
最终的代码如下
package com.example.testofdialog; import java.lang.reflect.Field; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class LoginActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); showWaiterAuthorizationDialog(); } // 显示对话框 public void showWaiterAuthorizationDialog() { // LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化 LayoutInflater factory = LayoutInflater.from(LoginActivity.this); // 把activity_login中的控件定义在View中 final View textEntryView = factory.inflate(R.layout.activity_login, null); // 将LoginActivity中的控件显示在对话框中 new AlertDialog.Builder(LoginActivity.this) // 对话框的标题 .setTitle("登陆") // 设定显示的View .setView(textEntryView) // 对话框中的“登陆”按钮的点击事件 .setPositiveButton("登陆", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 获取用户输入的“用户名”,“密码” // 注意:textEntryView.findViewById很重要,因为上面factory.inflate(R.layout.activity_login, // null)将页面布局赋值给了textEntryView了 final EditText etUserName = (EditText) textEntryView .findViewById(R.id.etuserName); final EditText etPassword = (EditText) textEntryView .findViewById(R.id.etPWD); // 将页面输入框中获得的“用户名”,“密码”转为字符串 String userName = etUserName.getText().toString() .trim(); String password = etPassword.getText().toString() .trim(); // 现在为止已经获得了字符型的用户名和密码了,接下来就是根据自己的需求来编写代码了 // 这里做一个简单的测试,假定输入的用户名和密码都是1则进入其他操作页面(OperationActivity) if (userName.equals("1") && password.equals("1")) { // 跳转到OperationActivity Intent intent = new Intent(); intent.setClass(LoginActivity.this, OperationActivity.class); startActivity(intent); // 关闭当前页面 LoginActivity.this.finish(); } else { Toast.makeText(LoginActivity.this, "密码或用户名错误", Toast.LENGTH_SHORT).show(); try { // 注意此处是通过反射,修改源代码类中的字段mShowing为true,系统会认为对话框打开 // 从而调用dismiss() Field field = dialog.getClass().getSuperclass() .getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, false); dialog.dismiss(); } catch (Exception e) { } } } }) // 对话框的“退出”单击事件 .setNegativeButton("退出", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { LoginActivity.this.finish(); } }) // 设置dialog是否为模态,false表示模态,true表示非模态 .setCancelable(false) // 对话框的创建、显示 .create().show(); } }
相关文章推荐
- Android:创建能输入内容的常见对话框以及使用对话框实现逻辑处理
- android—DatePicker 和TimePicker显示日期以及使用TimePickerDialog,DatePickerDialog来专门实现时间选择对话框
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- android:使用DialogFragment 创建对话框
- Android开发之使用AlertDialog创建对话框,单选框和多选框
- Android 对Layout_weight属性完全解析以及使用ListView来实现表格
- Android中自定义MultipartEntity实现文件上传以及使用Volley库实现文件上传
- Android 对Layout_weight属性完全解析以及使用ListView来实现表格
- JS弹出下载对话框以及实现常见文件类型的下载
- JS弹出下载对话框以及实现常见文件类型的下载
- Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)
- Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
- Android使用AlertDialog创建对话框
- Android ViewPager的使用以及定时切换实现
- Android中实现自动轮播的框架(Banner)的介绍以及使用
- Android中使用AsyncTask实现文件下载以及进度更新提示
- 【layout_weight权重】Android 对Layout_weight属性完全解析以及使用ListView来实现表格
- android webview 使用以及一些常见的异常处理
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- ANdroid如何实现网络重定向以及使用DownLoadManager类下载