自定义Dialog以及Dialog返回值到Activity

Posted 两三点,雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义Dialog以及Dialog返回值到Activity相关的知识,希望对你有一定的参考价值。

步骤:

1.定义自定义的Dialog的布局文件

2.写一个类MyDialog继承Dialog

3.Dialog 返回值到Activity的方法是定义一个接口,接口中定义返回值到Activity的方法,MyDialog实现这个接口,然后在需要的位置调用接口中的方法,Activity实现这个接口,

重写接口的方法

代码如下

return_code_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp"
    android:background="@color/white"
    android:weightSum="1">

    <TextView
        android:id="@+id/title"
        android:layout_width="321dp"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textSize="24dp"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="@color/black"
        />
    <TextView
        android:id="@+id/content"
        android:layout_marginTop="10dp"
        android:layout_width="305dp"
        android:layout_gravity="center"
        android:textColor="@color/viewfinder_mask"
        android:layout_height="wrap_content"
        android:textSize="18dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
   <EditText
       android:layout_width="0dp"
       android:layout_weight="1"
       android:gravity="center"
       android:textSize="20dp"
       android:password="true"
       android:layout_height="50dp"
       android:background="@drawable/bg_edit_normal"
       android:id="@+id/psw_1"
       android:digits="1234567890"/>
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_2"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_3"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_4"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_5"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_6"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    </LinearLayout>
</LinearLayout>
interface MyJudgePasswordInterface
public interface MyJudgePasswordInterface {
    public void returnJudgePasswordResult(boolean result);
}

PasswordDialog.java

package com.example.administrator.bigelephantbike;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

import org.w3c.dom.Text;

/**
 * Created by Administrator on 2016/4/3.
 */
public class PasswordDialog extends Dialog implements TextWatcher,View.OnKeyListener{

    private Context context;
    private String title;
    private String content;
    private TextView titleTextView;
    private TextView contentTextVIew;
    private EditText eidtText1;
    private EditText eidtText2;
    private EditText eidtText3;
    private EditText eidtText4;
    private EditText eidtText5;
    private EditText eidtText6;
    private String password;
    private int current=0;
    private String[]passwordInput =new String[6];
    private int maxLen =1;//限制EditText的输入长度
    private MyJudgePasswordInterface myJudgePasswordInterface;

    public PasswordDialog(Context context) {
        super(context);
    }
    public PasswordDialog(Context context, int themeResId) {
        super(context, themeResId);
    }
    public PasswordDialog(Context context,String title,String content,String password,MyJudgePasswordInterface myJudgePasswordInterface){
        super(context,R.style.add_dialog);
        this.context =context;
        this.title=title;
        this.content =content;
        this.password =password;
        this.myJudgePasswordInterface =myJudgePasswordInterface;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }
    void init(){
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.return_code_dialog, null);
        setContentView(view);

        titleTextView =(TextView)findViewById(R.id.title);
        contentTextVIew=(TextView)findViewById(R.id.content);
        eidtText1 =(EditText)findViewById(R.id.psw_1);
        eidtText2 =(EditText)findViewById(R.id.psw_2);
        eidtText3 =(EditText)findViewById(R.id.psw_3);
        eidtText4 =(EditText)findViewById(R.id.psw_4);
        eidtText5 =(EditText)findViewById(R.id.psw_5);
        eidtText6 =(EditText)findViewById(R.id.psw_6);

        titleTextView.setText(title);
        contentTextVIew.setText(content);

        //锁定数字键盘
        eidtText1.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText2.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText3.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText4.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText5.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText6.setInputType(EditorInfo.TYPE_CLASS_NUMBER);

        //添加内容改变的事件监听
        eidtText1.addTextChangedListener(this);
        eidtText2.addTextChangedListener(this);
        eidtText3.addTextChangedListener(this);
        eidtText4.addTextChangedListener(this);
        eidtText5.addTextChangedListener(this);
        eidtText6.addTextChangedListener(this);


        eidtText1.setOnKeyListener(this);
        eidtText2.setOnKeyListener(this);
        eidtText3.setOnKeyListener(this);
        eidtText4.setOnKeyListener(this);
        eidtText4.setOnKeyListener(this);
        eidtText5.setOnKeyListener(this);
        eidtText6.setOnKeyListener(this);

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        int length = 0;
        //Log.d("test","current="+current+"我变了");
        switch (current) {
            case 0:
                length = eidtText1.getText().length();
                changeFocus(length, eidtText2);
                passwordInput[0] = eidtText1.getText().toString();
                break;
            case 1:
                length = eidtText2.getText().length();
                changeFocus(length, eidtText3);
                passwordInput[1] = eidtText2.getText().toString();
                break;
            case 2:
                length = eidtText3.getText().length();
                changeFocus(length, eidtText4);
                passwordInput[2] = eidtText3.getText().toString();
                break;
            case 3:
                length = eidtText4.getText().length();
                changeFocus(length, eidtText5);
                passwordInput[3] = eidtText4.getText().toString();
                break;
            case 4:
                length = eidtText5.getText().length();
                changeFocus(length, eidtText6);
                passwordInput[4] = eidtText5.getText().toString();
                break;
            case 5:
                length = eidtText6.getText().length();
                if (length >= 1) {
                    passwordInput[5] = eidtText6.getText().toString();
                    myJudgePasswordInterface.returnJudgePasswordResult(validatePassword());
                    this.cancel();
                }
        }
    }
    @Override
    public void afterTextChanged(Editable s) {

    }
    void changeFocus(int l,EditText editText){
        if(l >= maxLen){
            current++;
            editText.setFocusable(true);
            editText.setFocusableInTouchMode(true);
            editText.requestFocus();
            editText.findFocus();
        }
    }
    boolean validatePassword(){
        current=0;
        StringBuffer stringBuffer=new StringBuffer();
        for(int i=0;i<passwordInput.length;i++){
            stringBuffer.append(passwordInput[i]);
        }
        String psw =stringBuffer.toString();
        return psw.equals(password);
    }
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DEL
                && event.getAction() == KeyEvent.ACTION_DOWN) {
            current--;
            switch(current){
                case 0:eidtText1.setText("");requestF(eidtText1);break;
                case 1:eidtText2.setText("");requestF(eidtText2);break;
                case 2:eidtText3.setText("");requestF(eidtText3);break;
                case 3:eidtText4.setText("");requestF(eidtText4);break;
                case 4:eidtText5.setText("");requestF(eidtText5);break;
                case 5:eidtText6.setText("");requestF(eidtText6);break;
            }
        }
        return false;
    }
    void requestF(EditText editText){
        editText.setFocusable(true);
        editText.setFocusableInTouchMode(true);
        editText.requestFocus();
        editText.findFocus();
    }
}

ChargeActivity.java

package com.example.administrator.bigelephantbike;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import wheelview.ArrayWheelAdapter;
import wheelview.OnWheelChangedListener;
import wheelview.WheelView;

public class ChargeActivity extends Activity implements OnWheelChangedListener,View.OnClickListener{
   private Button recoverBtn;
    private String passwordReturn="123456";
    private String passwordRecover="234567";

    private PasswordDialog myDialog;
    //密码输入是否正确
    private boolean pswResult;
    //实现MyJudgePasswordInterface
    private MyJudgePasswordInterface myJudgePasswordInterface;
    //1标识输入的是还车密码,2表示输入的是恢复密码
    private int flag=0;

    private String []nums={"0","1","2","3","4","5","6","7","8","9"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_charge);

        returnBtn =(Button)findViewById(R.id.return_btn);
        recoverBtn =(Button)findViewById(R.id.recover_btn);

        myJudgePasswordInterface=new MyJudgePasswordInterface() {
            @Override
            public void returnJudgePasswordResult(boolean result) {
                pswResult = result;
}
}; returnBtn.setOnClickListener(this); recoverBtn.setOnClickListener(this); } @Override public void onClick(View v) { //当点击还车按钮时 if(v.getId()==R.id.return_btn){ flag=1; myDialog =new PasswordDialog(ChargeActivity.this,this.getResources().getString(R.string.input_return_code),this.getResources().getString(R.string.return_tips),passwordReturn,myJudgePasswordInterface); myDialog.show(); } if(v.getId()==R.id.recover_btn){ flag=2; myDialog=new PasswordDialog(ChargeActivity.this,this.getResources().getString(R.string.input_recover_tips),this.getResources().getString(R.string.recover_tips),passwordRecover,myJudgePasswordInterface); myDialog.show(); } } }

 



以上是关于自定义Dialog以及Dialog返回值到Activity的主要内容,如果未能解决你的问题,请参考以下文章

自定义控件(Dialog篇)

自定义控件(Dialog篇)

自定义dialog可动态更新吗

android怎样自定义dialog

自定义样式 dialog

Android自定义Dialog