안 드 로 이 드 모방 위 챗 demo―로그 인 기능 실현(모 바 일 엔 드)

이동 단 로그 인 기능 구현
로그 인 기능 은 기본적으로 등록 과 마찬가지 로 유일 하 게 다른 것 은 로그 인 이 두 가지 로그 인 방식(마이크로 신호 와 핸드폰 번호)을 실현 할 수 있다 는 것 이다.즉,구조 가 다르다 는 것 이다.그래서 두 개의 레이아웃 이 필요 합 니 다.두 개의 activity(이 방법 은 비교적 간단 하고 거 칠 며 게 으 릅 니 다.activity 를 통 해 레이아웃 을 동적 으로 전환 할 수도 있 습 니 다.이렇게 하면 activity 하나만 있 으 면 됩 니 다)
두 개의 activity 를 만 들 고 두 가지 로그 인 방식 을 실현 합 니 다.
마이크로 신호 로그 인 activity
LoginUser.java

package com.example.wxchatdemo;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wxchatdemo.tools.IEditTextChangeListener;
import com.example.wxchatdemo.tools.WorksSizeCheckUtil;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class LoginUser extends AppCompatActivity {
    //      
    private EditText weixinNumber;
    private EditText password;
    private TextView phone_login;
    private Button button;
    //      Hander    
    private MyHander myhander = new MyHander();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_user); //    
        /*       */
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //    
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //                    
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        initViews();  //        
        /*    activity       */
        Intent intent = getIntent();
        String number = intent.getStringExtra("weixin_number");
        //              
        weixinNumber.setText(number);
        //            
        if (weixinNumber.getText() + "" == "" || password.getText() + "" == "") {
            button.setEnabled(false);
        } else {
            button.setEnabled(true);
        }
        inputFocus(); //  EditView  
        buttonChangeColor(); //      
        //            
        phone_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //         activity
                Intent intent=new Intent(LoginUser.this,LoginPhone.class);
                startActivity(intent);
            }
        });
        //button     
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //        activity,  AndroidMainfest.xml        ,  activity        activity
                Intent intent = new Intent();
                intent.setClass(LoginUser.this, Loading.class);
                startActivity(intent);
                //              
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000);
                            httpUrlConnPost(LoginUser.this.weixinNumber.getText() + "",
                                    password.getText() + "");
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
    }
    @SuppressLint("NewApi")
    public void initViews() {
        //        
        weixinNumber = (EditText) this.findViewById(R.id.log_weixin_number);
        password = (EditText) this.findViewById(R.id.log_passwd);
        phone_login = (TextView) this.findViewById(R.id.phone_log);
        button = (Button) this.findViewById(R.id.log_button);
    }
    public void inputFocus() {
        weixinNumber.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver1);
                    imageView.setBackgroundResource(R.color.input_dvier_focus);
                } else {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver1);
                    imageView.setBackgroundResource(R.color.input_dvier);
                }
            }
        });
        password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver2);
                    imageView.setBackgroundResource(R.color.input_dvier_focus);
                } else {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver2);
                    imageView.setBackgroundResource(R.color.input_dvier);
                }
            }
        });
    }
    public void buttonChangeColor() {
        //               Button    
        WorksSizeCheckUtil.textChangeListener textChangeListener = new WorksSizeCheckUtil.textChangeListener(button);
        textChangeListener.addAllEditText(weixinNumber, password);//       EditText     
        //          boolean     isHasContent     Button        
        WorksSizeCheckUtil.setChangeListener(new IEditTextChangeListener() {
            @Override
            public void textChange(boolean isHasContent) {
                if (isHasContent) {
                    button.setBackgroundResource(R.drawable.login_button_focus);
                    button.setTextColor(getResources().getColor(R.color.loginButtonTextFouse));
                } else {
                    button.setBackgroundResource(R.drawable.login_button_shape);
                    button.setTextColor(getResources().getColor(R.color.loginButtonText));
                }
            }
        });
    }
    //          
    public void httpUrlConnPost(String number, String password) {
        HttpURLConnection urlConnection = null;
        URL url;
        try {
            //    URL   
            url = new URL(
                    "http://100.2.178.10:8080/AndroidServer_war_exploded/Login");
            urlConnection = (HttpURLConnection) url.openConnection();//   http  
            urlConnection.setConnectTimeout(3000);//        
            urlConnection.setUseCaches(false);//      
            // urlConnection.setFollowRedirects(false); static  ,      URLConnection  。
            urlConnection.setInstanceFollowRedirects(true);//      ,        ,              
            urlConnection.setReadTimeout(3000);//        
            urlConnection.setDoInput(true);//               
            urlConnection.setDoOutput(true);//               
            urlConnection.setRequestMethod("POST");//        
            urlConnection.setRequestProperty("Content-Type",
                    "application/json;charset=UTF-8");//        
            urlConnection.connect();//   ,            connect    ,                TCP  
            JSONObject json = new JSONObject();//   json  
            json.put("number", URLEncoder.encode(number, "UTF-8"));//   URLEncoder.encode             
            json.put("password", URLEncoder.encode(password, "UTF-8"));//    put json   
            String jsonstr = json.toString();//  JSON   JSON           
            // ------------       ------------
            OutputStream out = urlConnection.getOutputStream();//    ,      ,http                    
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));//                  ,        ,             ,         
            bw.write(jsonstr);//  json         
            bw.flush();//      ,       ,     
            out.close();
            bw.close();//      
            Log.i("aa", urlConnection.getResponseCode() + "");
            //      L  ,         200       
            if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {//                
                // ------------             ------------
                InputStream in = urlConnection.getInputStream();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(in));
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = br.readLine()) != null) {// BufferedReader    ,        
                    buffer.append(str);
                }
                in.close();
                br.close();
                JSONObject rjson = new JSONObject(buffer.toString());
                Log.i("aa", "rjson=" + rjson);// rjson={"json":true}
                boolean result = rjson.getBoolean("json");//  rjson     key  "json"   ,           boolean     
                System.out.println("json:===" + result);
                //          true,       ,      
                if (result) {//         
                    // Android http  ,           ,             UI,    hander      UI   
                    myhander.sendEmptyMessage(1);
                    Log.i("  :", "    ");
                } else {
                    myhander.sendEmptyMessage(2);
                    System.out.println("222222222222222");
                    Log.i("  :", "    ");
                }
            } else {
                myhander.sendEmptyMessage(2);
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.i("aa", e.toString());
            System.out.println("11111111111111111");
            myhander.sendEmptyMessage(2);
        } finally {
            urlConnection.disconnect();//      TCP  ,    
        }
    }
    //  Android            UI,    Handler      UI   
    class MyHander extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //  hander      ,   1       ,   2      
            switch (msg.what) {
                case 1:
                    Log.i("aa", msg.what + "");
                    //  
                    Toast.makeText(getApplicationContext(), "    ",
                            Toast.LENGTH_SHORT).show();
                    //  Intent       ,       
                    Intent intent = new Intent();
                    intent.putExtra("weixin_number", weixinNumber.getText().toString());
                    intent.setClass(com.example.wxchatdemo.LoginUser.this,
                            com.example.wxchatdemo.MainWeixin.class);
                    startActivity(intent);
                    com.example.wxchatdemo.LoginUser.this.finish(); //    actitivy
                    break;
                case 2:
                    Log.i("aa", msg.what + "");
                    //   
                    new AlertDialog.Builder(com.example.wxchatdemo.LoginUser.this)
                            .setTitle("                      ")
                            .setMessage("           ,     ")
                            .setPositiveButton("  ", null)
                            .show();
                    break;
            }
        }
    }
    //        
    public void login_activity_back(View v) {
        /*        */
        Intent intent = new Intent();
        intent.setClass(com.example.wxchatdemo.LoginUser.this, Welcome.class);
        startActivity(intent);
        com.example.wxchatdemo.LoginUser.this.finish(); //    activity
    }
}
마이크로 신호 로그 인 activity 에 대응 하 는 레이아웃 파일
login_user.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/title"
    android:orientation="vertical">
    <!--    -->
    <ImageView
        android:id="@+id/close"
        android:layout_width="17dp"
        android:layout_height="17dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="45dp"
        android:onClick="login_activity_back"
        android:src="@drawable/backpay" />
    <!--  -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="45dp"
        android:text="   /QQ /    "
        android:textColor="@color/loginText"
        android:textSize="25sp" />
    <!--    -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:text="  "
            android:textColor="@color/loginText"
            android:textSize="16sp" />
        <EditText
            android:id="@+id/log_weixin_number"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="55dp"
            android:background="@null"
            android:hint="      /QQ /  "
            android:singleLine="true"
            android:textColorHint="@color/textColorHint"
            android:textCursorDrawable="@drawable/edit_cursor_color"
            android:textSize="16sp" />
    </LinearLayout>
    <!--   -->
    <ImageView
        android:id="@+id/login_diver1"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="17dp"
        android:background="@color/input_dvier" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:text="  "
            android:textColor="@color/loginText"
            android:textSize="16sp" />
        <EditText
            android:id="@+id/log_passwd"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="55dp"
            android:password="true"
            android:background="@null"
            android:hint="     "
            android:singleLine="true"
            android:textColorHint="@color/textColorHint"
            android:textCursorDrawable="@drawable/edit_cursor_color"
            android:textSize="16sp" />
    </LinearLayout>
    <!--   -->
    <ImageView
        android:id="@+id/login_diver2"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="17dp"
        android:background="@color/input_dvier" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/phone_log"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="30dp"
            android:text="      "
            android:textColor="@color/massageLogin"
            android:textSize="17dp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:gravity="center_horizontal">
        <!--    -->
        <Button
            android:id="@+id/log_button"
            android:layout_width="321dp"
            android:layout_height="48dp"
            android:background="@drawable/login_button_shape"
            android:text="  "
            android:textColor="@color/loginButtonText"
            android:textSize="16sp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="300dp"
        android:divider="@drawable/login_dvier"
        android:gravity="center_horizontal"
        android:showDividers="middle">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="10dp"
            android:text="    "
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="10dp"
            android:text="    "
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="10dp"
            android:text="      "
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
    </LinearLayout>
</LinearLayout>
핸드폰 번호 로그 인 activity
LoginPhone.java

package com.example.wxchatdemo;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wxchatdemo.tools.IEditTextChangeListener;
import com.example.wxchatdemo.tools.WorksSizeCheckUtil;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class LoginPhone extends AppCompatActivity {
    //      
    private EditText phone;
    private EditText password;
    private TextView user_login;
    private Button button;
    //      Hander    
    private LoginPhone.MyHander myhander = new LoginPhone.MyHander();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_phone); //    
        /*       */
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //    
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; //                    
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        initViews();  //        
        //            
        if (phone.getText() + "" == "" || password.getText() + "" == "") {
            button.setEnabled(false);
        } else {
            button.setEnabled(true);
        }
        inputFocus(); //  EditView  
        buttonChangeColor(); //      
        //             
        user_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //          activity
                Intent intent = new Intent(LoginPhone.this, LoginUser.class);
                startActivity(intent);
            }
        });
        //button     
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //        activity,  AndroidMainfest.xml        ,  activity        activity
                Intent intent = new Intent();
                intent.setClass(LoginPhone.this, Loading.class);
                startActivity(intent);
                //              
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000);
                            httpUrlConnPost(LoginPhone.this.phone.getText() + "",
                                    password.getText() + "");
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
    }
    @SuppressLint("NewApi")
    public void initViews() {
        //        
        phone = (EditText) this.findViewById(R.id.log_phone);
        password = (EditText) this.findViewById(R.id.log_passwd);
        user_login = (TextView) this.findViewById(R.id.user_log);
        button = (Button) this.findViewById(R.id.log_button);
    }
    public void inputFocus() {
        phone.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver1);
                    imageView.setBackgroundResource(R.color.input_dvier_focus);
                } else {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver1);
                    imageView.setBackgroundResource(R.color.input_dvier);
                }
            }
        });
        password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver2);
                    imageView.setBackgroundResource(R.color.input_dvier_focus);
                } else {
                    //              
                    ImageView imageView = (ImageView) findViewById(R.id.login_diver2);
                    imageView.setBackgroundResource(R.color.input_dvier);
                }
            }
        });
    }
    public void buttonChangeColor() {
        //               Button    
        WorksSizeCheckUtil.textChangeListener textChangeListener = new WorksSizeCheckUtil.textChangeListener(button);
        textChangeListener.addAllEditText(phone, password);//       EditText     
        //          boolean     isHasContent     Button        
        WorksSizeCheckUtil.setChangeListener(new IEditTextChangeListener() {
            @Override
            public void textChange(boolean isHasContent) {
                if (isHasContent) {
                    button.setBackgroundResource(R.drawable.login_button_focus);
                    button.setTextColor(getResources().getColor(R.color.loginButtonTextFouse));
                } else {
                    button.setBackgroundResource(R.drawable.login_button_shape);
                    button.setTextColor(getResources().getColor(R.color.loginButtonText));
                }
            }
        });
    }
    //          
    public void httpUrlConnPost(String phone, String password) {
        HttpURLConnection urlConnection = null;
        URL url;
        try {
            //    URL   
            url = new URL(
                    "http://100.2.178.10:8080/AndroidServer_war_exploded/Login");
            urlConnection = (HttpURLConnection) url.openConnection();//   http  
            urlConnection.setConnectTimeout(3000);//        
            urlConnection.setUseCaches(false);//      
            // urlConnection.setFollowRedirects(false); static  ,      URLConnection  。
            urlConnection.setInstanceFollowRedirects(true);//      ,        ,              
            urlConnection.setReadTimeout(3000);//        
            urlConnection.setDoInput(true);//               
            urlConnection.setDoOutput(true);//               
            urlConnection.setRequestMethod("POST");//        
            urlConnection.setRequestProperty("Content-Type",
                    "application/json;charset=UTF-8");//        
            urlConnection.connect();//   ,            connect    ,                TCP  
            JSONObject json = new JSONObject();//   json  
            json.put("number", URLEncoder.encode(phone, "UTF-8"));//   URLEncoder.encode             
            json.put("password", URLEncoder.encode(password, "UTF-8"));//    put json   
            String jsonstr = json.toString();//  JSON   JSON           
            // ------------       ------------
            OutputStream out = urlConnection.getOutputStream();//    ,      ,http                    
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));//                  ,        ,             ,         
            bw.write(jsonstr);//  json         
            bw.flush();//      ,       ,     
            out.close();
            bw.close();//      
            Log.i("aa", urlConnection.getResponseCode() + "");
            //      L  ,         200       
            if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {//                
                // ------------             ------------
                InputStream in = urlConnection.getInputStream();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(in));
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = br.readLine()) != null) {// BufferedReader    ,        
                    buffer.append(str);
                }
                in.close();
                br.close();
                JSONObject rjson = new JSONObject(buffer.toString());
                Log.i("aa", "rjson=" + rjson);// rjson={"json":true}
                boolean result = rjson.getBoolean("json");//  rjson     key  "json"   ,           boolean     
                System.out.println("json:===" + result);
                //          true,       ,      
                if (result) {//         
                    // Android http  ,           ,             UI,    hander      UI   
                    myhander.sendEmptyMessage(1);
                    Log.i("  :", "    ");
                } else {
                    myhander.sendEmptyMessage(2);
                    System.out.println("222222222222222");
                    Log.i("  :", "    ");
                }
            } else {
                myhander.sendEmptyMessage(2);
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.i("aa", e.toString());
            System.out.println("11111111111111111");
            myhander.sendEmptyMessage(2);
        } finally {
            urlConnection.disconnect();//      TCP  ,    
        }
    }
    //  Android            UI,    Handler      UI   
    class MyHander extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //  hander      ,   1       ,   2      
            switch (msg.what) {
                case 1:
                    Log.i("aa", msg.what + "");
                    Toast.makeText(getApplicationContext(), "    ",
                            Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent (com.example.wxchatdemo.LoginPhone.this, com.example.wxchatdemo.MainWeixin.class);
                    startActivity(intent);
                    com.example.wxchatdemo.LoginPhone.this.finish();
                    break;
                case 2:
                    Log.i("aa", msg.what + "");
                    new AlertDialog.Builder(com.example.wxchatdemo.LoginPhone.this)
                            .setTitle("                       ")
                            .setMessage("            ,     ")
                            .setPositiveButton("  ", null)
                            .show();
            }
        }
    }
    //        
    public void login_activity_back(View v) {
        /*        */
        Intent intent = new Intent();
        intent.setClass(com.example.wxchatdemo.LoginPhone.this, Welcome.class);
        startActivity(intent);
        com.example.wxchatdemo.LoginPhone.this.finish(); //    activity
    }
}
핸드폰 번호 로그 인 activity 에 대응 하 는 레이아웃 파일
login_phone.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/title"
    android:orientation="vertical">
    <!--    -->
    <ImageView
        android:id="@+id/close"
        android:layout_width="17dp"
        android:layout_height="17dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="45dp"
        android:onClick="login_activity_back"
        android:src="@drawable/backpay" />
    <!--  -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="45dp"
        android:text="     "
        android:textColor="@color/loginText"
        android:textSize="25sp" />
    <!--    -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:text="   "
            android:textColor="@color/loginText"
            android:textSize="16sp" />
        <EditText
            android:id="@+id/log_phone"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="35dp"
            android:background="@null"
            android:hint="      "
            android:singleLine="true"
            android:textColorHint="@color/textColorHint"
            android:textCursorDrawable="@drawable/edit_cursor_color"
            android:textSize="16sp" />
    </LinearLayout>
    <!--   -->
    <ImageView
        android:id="@+id/login_diver1"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="17dp"
        android:background="@color/input_dvier" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:text="  "
            android:textColor="@color/loginText"
            android:textSize="16sp" />
        <EditText
            android:id="@+id/log_passwd"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:password="true"
            android:layout_marginLeft="55dp"
            android:background="@null"
            android:hint="     "
            android:singleLine="true"
            android:textColorHint="@color/textColorHint"
            android:textCursorDrawable="@drawable/edit_cursor_color"
            android:textSize="16sp" />
    </LinearLayout>
    <!--   -->
    <ImageView
        android:id="@+id/login_diver2"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="17dp"
        android:background="@color/input_dvier" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/user_log"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="30dp"
            android:text="    /QQ /    "
            android:textColor="@color/massageLogin"
            android:textSize="17dp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:gravity="center_horizontal">
        <!--    -->
        <Button
            android:id="@+id/log_button"
            android:layout_width="321dp"
            android:layout_height="48dp"
            android:background="@drawable/login_button_shape"
            android:text="  "
            android:textColor="@color/loginButtonText"
            android:textSize="16sp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="150dp"
        android:divider="@drawable/login_dvier"
        android:gravity="center_horizontal"
        android:showDividers="middle">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="10dp"
            android:text="    "
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="10dp"
            android:text="    "
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingHorizontal="10dp"
            android:text="      "
            android:textColor="@color/massageLogin"
            android:textSize="14dp" />
    </LinearLayout>
</LinearLayout>
shapre 파일 login 만 들 기dvier.xml,사용자 정의 세로 분할 선
login_dvier.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/login_dvier" />
    <size android:height="1dp"></size>
    <size android:width="1dp"></size>
</shape>
위의 두 로그 인 activity 는 사용자 정의 대기 상자 activity 를 실 현 했 습 니 다.로그 인 단 추 를 누 르 면 이 activity 로 이동 하지만 사용자 정의 activity 는 원래 의 인터페이스 를 덮어 씁 니 다.한편,위 챗 은 로그 인 단 추 를 누 르 면 대기 상자 가 나타 나 고 기 존 activity(즉 기 존 인터페이스)를 덮어 쓰 지 않 기 때문에 사용자 정의 대기 상자 activity 를 Androidfest.xml 파일 에 대화 상자 로 설정 하면 기 존 activity 를 덮어 쓰 지 않 습 니 다.
activity Loading.java 를 만 들 고 사용자 정의 대기 상 자 를 만 듭 니 다.
Loading.java

package com.example.wxchatdemo;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class Loading extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loading); //    
        //       activity
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Loading.this.finish();
            }
        }, 1000);
    }
}
activity Loading.java 에 대응 하 는 레이아웃 파일 loading.xml 만 들 기
loading.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="180dp"
        android:layout_height="180dp"
        android:layout_centerInParent="true"
        android:background="@drawable/loading_bg">
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:orientation="vertical">
            <ProgressBar
                android:id="@+id/progressBar1"
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="    "
                android:textColor="#fff"
                android:textSize="20sp" />
        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>
AndroidMainfest.xml 파일 에 사용자 정의 대기 상자 activity Loading.java 를 대화 상자 로 설정 합 니 다.

<activity
            android:name=".Loading"
            android:theme="@style/MyDialogStyle" />
在这里插入图片描述
위 에서 사용 하 는 테마 theme 는 사용자 정의 테마 입 니 다.activity 를 대화 상자 로 바 꾸 면 기 존의 activity 를 덮어 쓰 지 않 습 니 다.사용자 정의 테 마 를 어떻게 정의 하 는 지 알려 드 리 겠 습 니 다.
스타일 styles.xml 파일 을 만 들 고 사용자 정의 테 마 를 실현 합 니 다.
在这里插入图片描述
在这里插入图片描述
styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyDialogStyle">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>
</resources>
colors.xml 성명 에 사용 할 색
colors.xml

    <color name="massageLogin">#5A6A8B</color>
    <color name="login_dvier">#BEBEBE</color>
AndroidMainfest.xml 파일 에서 만 든 activity 를 설명 합 니 다.
在这里插入图片描述
테스트
서버 로그 인 폼 처리 기능 은 아직 쓰 지 않 았 지만 위의 효 과 를 테스트 할 수 있 습 니 다.
이전 글 에서 로그 인 단 추 를 누 르 면 주석 코드 를 취소 합 니 다.
在这里插入图片描述
두 개의 activity 로그 인 에 성공 한 후 activity 코드 세그먼트 주석 을 건 너 뛰 고 프로젝트 테스트 를 시작 합 니 다.
在这里插入图片描述
在这里插入图片描述
안 드 로 이 드 모방 위 챗 데모-로그 인 기능 실현(모 바 일 엔 드)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 모방 위 챗 로그 인 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기