Android自定義登陸窗口-對話框
dilog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txt_loginerror"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textColor="#ff0000"
android:text="輸入的賬號和密碼不正確"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="invisible"
/>
<TextView
android:id="@+id/username"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:text="賬號"
android:gravity="left"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<EditText
android:id="@+id/txt_username"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/password"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="密碼"
android:gravity="left"
/>
<EditText
android:id="@+id/txt_password"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/txt_toregister"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textColor="#2200C1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="沒有賬號?快速注冊"
android:gravity="left"
/>
</LinearLayout>
代碼裡面:
<PRE class=java name="code">private void CreateLoginAlert()
{
LayoutInflater factory = LayoutInflater.from(LoginActivity.this);
//得到自定義對話框
View DialogView = factory.inflate(R.layout.login_dialog, null);
AlertDialog.Builder ad =new AlertDialog.Builder(this);
ad.setTitle("賬號登陸");
ad.setView(DialogView);
adi= ad.create();
adi.setButton("登錄", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
username = (EditText)adi.findViewById(R.id.txt_username);
password = (EditText)adi.findViewById(R.id.txt_password);
loginerror = (TextView)adi.findViewById(R.id.txt_loginerror);
m_Dilog=ProgressDialog.show(LoginActivity.this, "請等待...", "正在為你登陸...",true);
mRedrawHandler.sleep(100);
}
});
adi.setButton2("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
adi.show();
}
private RefreshHandler mRedrawHandler = new RefreshHandler();
class RefreshHandler extends Handler{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
try {
socket = new Socket("113.250.155.194", 9999);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
if(username.getText().length() == 0)
{
adi.show();
loginerror.setText("賬號不能為空!");
loginerror.setVisibility(loginerror.VISIBLE);
}else if(password.getText().length() == 0){
adi.show();
loginerror.setText("密碼不能為空!");
loginerror.setVisibility(loginerror.VISIBLE);
}else{
UserModel users = new UserModel();
users.setUserName(username.getText().toString());
users.setUserPass(password.getText().toString());
users.setUserState(1);
users.setGuanliyuan(0);
out.println("login&" + UserModel.userToString(users));
out.flush();
String line;
try {
line = in.readLine();
System.out.println("登錄窗口從服務器收到的消息為:" + line);
if (line.startsWith("LOGINOK")) {
System.out.println(line.toString());
UserModel user = UserModel.getUserByString(line);
out.println("updateList&" + UserModel.userToString(user));
out.flush();
Toast.makeText(LoginActivity.this, "登陸成功", Toast.LENGTH_SHORT).show();
//ChatFrame cf = new ChatFrame(user.getNick(), user.getGuanliyuan());
// cf.setLocation(250, 50);
//cf.setVisible(true);
//cf.connect(in, out);
//this.dispose();
// return;
}else
if (line.equals("ERROR")) {
Toast.makeText(LoginActivity.this, "登陸失敗", Toast.LENGTH_SHORT).show();
adi.show();
adi.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
m_Dilog.dismiss();
}
super.handleMessage(msg);
}
}
public void sleep(long delayMillis)
{
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
就這麼簡單,效果圖如下: