Android开发--WIFI输入密码Dialog的实现

最终实现效果是点击一个未保存密码的WIFI信号时,弹出如下Dialog:

Android开发--WIFI输入密码Dialog的实现_第1张图片

1、定义Dialog的布局文件:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
           
           
             
             
             
             
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
style="@style/DialogStyle">
android:id="@+id/wifiDialogPsw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="2">
 来自CODE的代码片
WIFI_Dialog.XML

2、定义一个Dialog的子类

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
           
           
             
             
             
             
package com.wifi.utils;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.controlpcpro.R;
public class WifiPswDialog extends Dialog{
private Button cancelButton;
private Button okButton;
private EditText pswEdit;
private OnCustomDialogListener customDialogListener;
public WifiPswDialog(Context context,OnCustomDialogListener customListener) {
//OnCancelListener cancelListener) {
super(context);
// TODO Auto-generated constructor stub
customDialogListener = customListener;
}
//定义dialog的回调事件
public interface OnCustomDialogListener{
void back(String str);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.wifi_config_dialog);
setTitle("请输入密码");
pswEdit = (EditText)findViewById(R.id.wifiDialogPsw);
cancelButton = (Button)findViewById(R.id.wifiDialogCancel);
okButton = (Button)findViewById(R.id.wifiDialogCertain);
cancelButton.setOnClickListener(buttonDialogListener);
okButton.setOnClickListener(buttonDialogListener);
}
private View.OnClickListener buttonDialogListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if(view.getId() == R.id.wifiDialogCancel){
pswEdit = null;
customDialogListener.back(null);
cancel();//自动调用dismiss();
}
else{
customDialogListener.back(pswEdit.getText().toString());
dismiss();
}
}
};
}
 来自CODE的代码片
WifiPswDialog

首先说明下Dialog中两个Button的点击事件的处理

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
           
           
             
             
             
             
public void onClick(View view) {
// TODO Auto-generated method stub
if(view.getId() == R.id.wifiDialogCancel){
pswEdit = null;
customDialogListener.back(null);
cancel();//自动调用dismiss();
}
else{
customDialogListener.back(pswEdit.getText().toString());
dismiss();
}
}
 来自CODE的代码片
click

参考: http://labs.chinamobile.com/groups/10670_27134
对话框关闭时,调用dismiss()方法。点击“取消”时调用cancel()方法,指不再需要执行对话框上的任何功能和动作,取消对话框会自动调用dismiss()方法。

实现从对话框中返回信息,如WIFI密码

Dialog并没有提供可以直接返回数据的方法,我们可以通过创建自己的监听类实现

 1
 2
 3
 4
           
           
             
             
             
             
//定义dialog的回调事件
public interface OnCustomDialogListener{
void back(String str);
}
 来自CODE的代码片
OnCustomDialogListener
同样Dialog的构造方法也需要改变

 1
 2
 3
 4
 5
 6
           
           
             
             
             
             
public WifiPswDialog(Context context,OnCustomDialogListener customListener) {
super(context);
// TODO Auto-generated constructor stub
customDialogListener = customListener;
}
 来自CODE的代码片
WifiPswDialog

然后我们需要在创建Dialog时候实现 OnCustomDialogListener接口。
Dialog中如何传出数据呢,这是在OnClick方法中传出的。如代码中的语句:
customDialogListener.back(null);
customDialogListener.back(pswEdit.getText().toString());
3、在Acitivity中创建Dialog
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
            
            
              
              
              
              
WifiPswDialog pswDialog = new WifiPswDialog(ControlPCMainActivity.this,new OnCustomDialogListener() {
@Override
public void back(String str) {
// TODO Auto-generated method stub
wifiPassword = str;
if(wifiPassword != null){
int netId = localWifiUtils.AddWifiConfig(wifiResultList,wifiItemSSID, wifiPassword);
Log.i("WifiPswDialog",String.valueOf(netId));
if(netId != -1){
localWifiUtils.getConfiguration();//添加了配置信息,要重新得到配置信息
if(localWifiUtils.ConnectWifi(netId)){
selectedItem.setBackgroundResource(R.color.green);
}
}
else{
Toast.makeText(ControlPCMainActivity.this, "网络连接错误", Toast.LENGTH_SHORT).show();
selectedItem.setBackgroundResource(R.color.burlywood);
}
}
else{
selectedItem.setBackgroundResource(R.color.burlywood);
}
}
});
pswDialog.show();
 来自CODE的代码片
snippet_file_0.txt
创建Dialog时最主要的就是对OnCustomDialogListener接口的实现,对back()方法实现, back方法是对话框消失后执行的操作,返回的数据通过back()方法的参数str实现。
创建完成后Dialog的显示只需要通过 Dialog.show()方法实现就可以了


project源码:http://download.csdn.net/detail/liuhui_8989/7154671

你可能感兴趣的:(Android,UI)