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 里面取得的提示信息 。
对于对话框的创建以及一些常用的格式,大家可以参考以下的链接
http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html。这篇博客写的很好,对对话框的总结很全面。
下面我在做一个延伸。问题是:弹出一个对话框,对话框有用户名和密码两个文本框,填入正确的用户名和密码然后点击确定进入另一个页面,错误的话提示错误。
下面就针对上面提出的问题开始解决之旅
上面的问题大部分是出现在系统登录时,那么就要求界面尽量的简洁。我要实现的界面如下所示
其实实现这个很简单,先说一下界面吧。这里需要两个 Activity页面。其中一个 activity_main.xml为空,用来承载对话框( dialog),而另一个 login_activity.xml里面包含用户名和密码的输入框。简单点说就是将 login_activity.xml镶嵌到 dialog中显示。
好了先看一下布局文件
先说一下“点击对话框之外的地方对话框会消失”这个问题
其实 Android系统中的 dialog默认是非模态的,只有设置为模态的才可以解决上述问题。而这个方法也很简单就是. setCancelable(true);将 true该 false即可解决这个问题。
再来说一下“如果输入错误给出提示信息之后对话框也会消失,不能继续操作”这个问题
这里需要调用对话框的 dismiss()方法。
最终的代码如下
原文链接:http://blog.youkuaiyun.com/aboy123/article/details/8548930
所谓的“提示”就是一种简易的消息提示框,不能被用户单击,根据代码中时间参数的设置,自动消失。
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();
}
}
原文链接:http://blog.youkuaiyun.com/aboy123/article/details/8548930