android登陆_android登陆界面 - CSDN
精华内容
参与话题
  • Android登录界面设计

    万次阅读 多人点赞 2017-09-01 13:47:26
    Android登录界面设计 这是之前项目的一个界面,现在抽出来給大家看看。界面:功能:(1)基本的判断,输入的是否为空这里没有判断网络情况,实际项目中是必须要判断的(2)核心知识:sharePreference的使用本地保存...

    Android登录界面设计
    这是之前项目的一个界面,现在抽出来給大家看看。

    界面:

    1

    功能:

    (1)基本的判断,输入的是否为空

    这里没有判断网络情况,实际项目中是必须要判断的

    (2)核心知识:sharePreference的使用

    本地保存数据,用户名和密码,还有下面复选框的状态都要保存。
    这里我自己封装了一个工具栏。

    (3)密码可见和不可见

    默认密码不可见,单击图标后可见,再次点击后不可见。
    点击右边的图标时,对EditText设置代码即可:

      if (iv_see_password.isSelected()) {
                iv_see_password.setSelected(false);
                //密码不可见
                et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    
            } else {
                iv_see_password.setSelected(true);
                //密码可见
                et_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
            }
    

    (4)登录后会显示链接服务器的对话框

    这里有一个自定义的对话框,也是可以自己修改对话框的样式和显示的文字

    (5)这里密码保存到本地经过了base64的加密

    这里创建了一个加密工具类,base64加密过的字符串,会很容易就被解密出来。
    但是我发现一个字符串可以加密N次,解密也是要N次,就可以得到原来的字符串。
    所以我在工具类里面设置了N的数值,别人就很难知道我的base64怎么解密了!
    值得注意的是:多次解密过程有可能会給字符串添加空格,所有每次要对字符串去空格!
    加密解密的次数太大,也是要耗时间的,不建议N的数值大于20.

    动态效果:

    2
    如果勾选了自动登录,下次进入登录界面,会自动请求服务器登录。如下图所示:
    3

    这里分享一下主要的代码:

    登录页面的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="#fff"
            android:orientation="vertical">
    
        <TextView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:text="登录界面"
                android:gravity="center"
                android:textSize="30sp"
                />
        <View android:layout_width="match_parent" android:layout_height="@dimen/dp_1"
              android:background="@color/orange_main"
                />
    
        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/item_height_normal"
                android:layout_marginLeft="@dimen/margin_large"
                android:layout_marginRight="@dimen/margin_large"
                android:layout_marginTop="@dimen/dp_120">
    
            <ImageView
                    android:id="@+id/img_account"
                    android:layout_width="@dimen/dp_19"
                    android:layout_height="@dimen/dp_20"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="@dimen/margin_tiny"
                    android:layout_marginLeft="@dimen/margin_tiny"
                    android:scaleType="fitXY"
                    android:src="@drawable/icon_login_account"/>
    
            <EditText
                    android:id="@+id/et_account"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_gravity="center"
                    android:layout_marginBottom="@dimen/margin_tiny"
                    android:layout_marginLeft="@dimen/margin_normal"
                    android:layout_toRightOf="@+id/img_account"
                    android:background="@null"
                    android:hint="@string/account"
                    android:maxLines="1"
                    android:textColor="@android:color/black"
                    android:textColorHint="@color/tv_gray_deep"
                    android:textSize="@dimen/text_size_normal"/>
    
            <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/line_height"
                    android:layout_alignParentBottom="true"
                    android:layout_marginLeft="@dimen/margin_normal"
                    android:layout_toRightOf="@+id/img_account"
                    android:background="@color/orange_light"/>
        </RelativeLayout>
    
        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/item_height_normal"
                android:layout_marginLeft="@dimen/margin_large"
                android:layout_marginRight="@dimen/margin_large">
    
            <ImageView
                    android:id="@+id/img_pw"
                    android:layout_width="@dimen/dp_18"
                    android:layout_height="@dimen/dp_20"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="@dimen/margin_tiny"
                    android:layout_marginLeft="@dimen/margin_tiny"
                    android:scaleType="fitXY"
                    android:src="@drawable/icon_login_pw"/>
    
            <EditText
                    android:id="@+id/et_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_gravity="center"
                    android:layout_marginBottom="@dimen/margin_tiny"
                    android:layout_marginLeft="@dimen/margin_normal"
                    android:layout_toRightOf="@+id/img_pw"
                    android:background="@null"
                    android:hint="@string/password"
                    android:inputType="textPassword"
                    android:maxLines="1"
                    android:textColor="@android:color/black"
                    android:textColorHint="@color/tv_gray_deep"
                    android:textSize="@dimen/text_size_normal"/>
            <ImageView
                    android:id="@+id/iv_see_password"
                    android:layout_width="@dimen/image_height_litter"
                    android:layout_height="@dimen/image_height_litter"
                    android:src="@drawable/image_password_bg"
                    android:layout_centerVertical="true"
                    android:layout_alignParentRight="true"
                    android:scaleType="fitXY"
                    />
            <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/line_height"
                    android:layout_alignParentBottom="true"
                    android:layout_marginLeft="@dimen/margin_normal"
                    android:layout_toRightOf="@+id/img_pw"
                    android:background="@color/orange_light"/>
        </RelativeLayout>
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/margin_large"
                android:layout_marginRight="@dimen/margin_large"
                android:layout_marginTop="@dimen/margin_small"
                android:paddingBottom="@dimen/margin_small"
                android:paddingTop="@dimen/margin_small"
                android:orientation="horizontal"
                android:gravity="center"
                >
            <CheckBox
                    android:id="@+id/checkBox_password"
                    android:padding="@dimen/dp_10"
                    android:textSize="@dimen/text_size_normal"
                    android:layout_gravity="center"
                    android:layout_width="wrap_content"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:text="@string/check_password"
                    android:textColor="@color/top_bar_normal_bg" android:checked="false"/>
            <CheckBox
                    android:id="@+id/checkBox_login"
                    android:padding="@dimen/dp_10"
                    android:textSize="@dimen/text_size_normal"
                    android:layout_gravity="center"
                    android:layout_width="wrap_content"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:text="@string/check_login"
                    android:textColor="@color/top_bar_normal_bg" android:checked="false"/>
    
        </LinearLayout>
        <Button
                android:id="@+id/btn_login"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/margin_large"
                android:layout_marginRight="@dimen/margin_large"
                android:layout_marginTop="@dimen/margin_huge"
                android:paddingBottom="@dimen/margin_small"
                android:paddingTop="@dimen/margin_small"
                android:text="@string/login"
                android:background="@drawable/btn_orange_selector"
                android:textColor="@android:color/white"
                android:textSize="@dimen/text_size_normal"/>
    
    
    </LinearLayout>
    

    sharePreference工具类代码:

    package com.lwz.login_demo.util;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    
    /**
     * 这是一个SharePreference的根据类,使用它可以更方便的数据进行简单存储
     * 这里只要知道基本调用方法就可以了
     * 1.通过构造方法来传入上下文和文件名
     * 2.通过putValue方法传入一个或多个自定义的ContentValue对象,进行数据存储
     * 3.通过get方法来获取数据
     * 4.通过clear方法来清除这个文件的数据
     * 这里没有提供清除单个key的数据,是因为存入相同的数据会自动覆盖,没有必要去理会
     */
    public class SharedPreferencesUtils {
        //定义一个SharePreference对象
        SharedPreferences sharedPreferences;
        //定义一个上下文对象
    
        //创建SharePreference对象时要上下文和存储的模式
        //通过构造方法传入一个上下文
        public SharedPreferencesUtils(Context context, String fileName) {
            //实例化SharePreference对象,使用的是get方法,而不是new创建
            //第一个参数是文件的名字
            //第二个参数是存储的模式,一般都是使用私有方式:Context.MODE_PRIVATE
            sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
        }
    
        /**
         * 存储数据
         * 这里要对存储的数据进行判断在存储
         * 只能存储简单的几种数据
         * 这里使用的是自定义的ContentValue类,来进行对多个数据的处理
         */
        //创建一个内部类使用,里面有key和value这两个值
        public static class ContentValue {
            String key;
            Object value;
    
            //通过构造方法来传入key和value
            public ContentValue(String key, Object value) {
                this.key = key;
                this.value = value;
            }
        }
    
        //一次可以传入多个ContentValue对象的值
        public void putValues(ContentValue... contentValues) {
            //获取SharePreference对象的编辑对象,才能进行数据的存储
            SharedPreferences.Editor editor = sharedPreferences.edit();
            //数据分类和存储
            for (ContentValue contentValue : contentValues) {
                //如果是字符型类型
                if (contentValue.value instanceof String) {
                    editor.putString(contentValue.key, contentValue.value.toString()).commit();
                }
                //如果是int类型
                if (contentValue.value instanceof Integer) {
                    editor.putInt(contentValue.key, Integer.parseInt(contentValue.value.toString())).commit();
                }
                //如果是Long类型
                if (contentValue.value instanceof Long) {
                    editor.putLong(contentValue.key, Long.parseLong(contentValue.value.toString())).commit();
                }
                //如果是布尔类型
                if (contentValue.value instanceof Boolean) {
                    editor.putBoolean(contentValue.key, Boolean.parseBoolean(contentValue.value.toString())).commit();
                }
    
            }
        }
    
    
        //获取数据的方法
        public String getString(String key) {
            return sharedPreferences.getString(key, null);
        }
    
        public boolean getBoolean(String key, Boolean b) {
            return sharedPreferences.getBoolean(key, b);
        }
    
        public int getInt(String key) {
            return sharedPreferences.getInt(key, -1);
        }
    
        public long getLong(String key) {
            return sharedPreferences.getLong(key, -1);
        }
    
        //清除当前文件的所有的数据
        public void clear() {
            sharedPreferences.edit().clear().commit();
        }
    
    }
    
    

    登录页面的java逻辑代码:

    package com.lwz.login_demo.activity;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.text.InputType;
    import android.view.View;
    import android.widget.*;
    import com.lwz.login_demo.R;
    import com.lwz.login_demo.util.Base64Utils;
    import com.lwz.login_demo.util.SharedPreferencesUtils;
    import com.lwz.login_demo.widget.LoadingDialog;
    
    /**
     * 登录界面
     */
    
    public class LoginActivity extends Activity
            implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
        //布局内的控件
        private EditText et_name;
        private EditText et_password;
        private Button mLoginBtn;
        private CheckBox checkBox_password;
        private CheckBox checkBox_login;
        private ImageView iv_see_password;
    
        private LoadingDialog mLoadingDialog; //显示正在加载的对话框
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            initViews();
            setupEvents();
            initData();
    
        }
    
        private void initData() {
    
    
            //判断用户第一次登陆
            if (firstLogin()) {
                checkBox_password.setChecked(false);//取消记住密码的复选框
                checkBox_login.setChecked(false);//取消自动登录的复选框
            }
            //判断是否记住密码
            if (remenberPassword()) {
                checkBox_password.setChecked(true);//勾选记住密码
                setTextNameAndPassword();//把密码和账号输入到输入框中
            } else {
                setTextName();//把用户账号放到输入账号的输入框中
            }
    
            //判断是否自动登录
            if (autoLogin()) {
                checkBox_login.setChecked(true);
                login();//去登录就可以
    
            }
        }
    
        /**
         * 把本地保存的数据设置数据到输入框中
         */
        public void setTextNameAndPassword() {
            et_name.setText("" + getLocalName());
            et_password.setText("" + getLocalPassword());
        }
    
        /**
         * 设置数据到输入框中
         */
        public void setTextName() {
            et_name.setText("" + getLocalName());
        }
    
    
        /**
         * 获得保存在本地的用户名
         */
        public String getLocalName() {
            //获取SharedPreferences对象,使用自定义类的方法来获取对象
            SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
            String name = helper.getString("name");
            return name;
        }
    
    
        /**
         * 获得保存在本地的密码
         */
        public String getLocalPassword() {
            //获取SharedPreferences对象,使用自定义类的方法来获取对象
            SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
            String password = helper.getString("password");
            return Base64Utils.decryptBASE64(password);   //解码一下
    //       return password;   //解码一下
    
        }
    
        /**
         * 判断是否自动登录
         */
        private boolean autoLogin() {
            //获取SharedPreferences对象,使用自定义类的方法来获取对象
            SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
            boolean autoLogin = helper.getBoolean("autoLogin", false);
            return autoLogin;
        }
    
        /**
         * 判断是否记住密码
         */
        private boolean remenberPassword() {
            //获取SharedPreferences对象,使用自定义类的方法来获取对象
            SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
            boolean remenberPassword = helper.getBoolean("remenberPassword", false);
            return remenberPassword;
        }
    
    
        private void initViews() {
            mLoginBtn = (Button) findViewById(R.id.btn_login);
            et_name = (EditText) findViewById(R.id.et_account);
            et_password = (EditText) findViewById(R.id.et_password);
            checkBox_password = (CheckBox) findViewById(R.id.checkBox_password);
            checkBox_login = (CheckBox) findViewById(R.id.checkBox_login);
            iv_see_password = (ImageView) findViewById(R.id.iv_see_password);
        }
    
        private void setupEvents() {
            mLoginBtn.setOnClickListener(this);
            checkBox_password.setOnCheckedChangeListener(this);
            checkBox_login.setOnCheckedChangeListener(this);
            iv_see_password.setOnClickListener(this);
    
        }
    
        /**
         * 判断是否是第一次登陆
         */
        private boolean firstLogin() {
            //获取SharedPreferences对象,使用自定义类的方法来获取对象
            SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
            boolean first = helper.getBoolean("first", true);
            if (first) {
                //创建一个ContentVa对象(自定义的)设置不是第一次登录,,并创建记住密码和自动登录是默认不选,创建账号和密码为空
                helper.putValues(new SharedPreferencesUtils.ContentValue("first", false),
                        new SharedPreferencesUtils.ContentValue("remenberPassword", false),
                        new SharedPreferencesUtils.ContentValue("autoLogin", false),
                        new SharedPreferencesUtils.ContentValue("name", ""),
                        new SharedPreferencesUtils.ContentValue("password", ""));
                return true;
            }
            return false;
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_login:
                    loadUserName();    //无论如何保存一下用户名
                    login(); //登陆
                    break;
                case R.id.iv_see_password:
                    setPasswordVisibility();    //改变图片并设置输入框的文本可见或不可见
                    break;
    
            }
        }
    
        /**
         * 模拟登录情况
         * 用户名csdn,密码123456,就能登录成功,否则登录失败
         */
        private void login() {
    
            //先做一些基本的判断,比如输入的用户命为空,密码为空,网络不可用多大情况,都不需要去链接服务器了,而是直接返回提示错误
          if (getAccount().isEmpty()){
              showToast("你输入的账号为空!");
              return;
          }
    
            if (getPassword().isEmpty()){
                showToast("你输入的密码为空!");
                return;
            }
            //登录一般都是请求服务器来判断密码是否正确,要请求网络,要子线程
            showLoading();//显示加载框
            Thread loginRunnable = new Thread() {
    
                @Override
                public void run() {
                    super.run();
                    setLoginBtnClickable(false);//点击登录后,设置登录按钮不可点击状态
    
    
                    //睡眠3秒
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    //判断账号和密码
                    if (getAccount().equals("csdn") && getPassword().equals("123456")) {
                        showToast("登录成功");
                        loadCheckBoxState();//记录下当前用户记住密码和自动登录的状态;
    
                        startActivity(new Intent(LoginActivity.this, LoginAfterActivity.class));
                        finish();//关闭页面
                    } else {
                        showToast("输入的登录账号或密码不正确");
                    }
    
                    setLoginBtnClickable(true);  //这里解放登录按钮,设置为可以点击
                    hideLoading();//隐藏加载框
                }
            };
            loginRunnable.start();
    
    
        }
    
    
        /**
         * 保存用户账号
         */
        public void loadUserName() {
            if (!getAccount().equals("") || !getAccount().equals("请输入登录账号")) {
                SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
                helper.putValues(new SharedPreferencesUtils.ContentValue("name", getAccount()));
            }
    
        }
    
        /**
         * 设置密码可见和不可见的相互转换
         */
        private void setPasswordVisibility() {
            if (iv_see_password.isSelected()) {
                iv_see_password.setSelected(false);
                //密码不可见
                et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    
            } else {
                iv_see_password.setSelected(true);
                //密码可见
                et_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
            }
    
        }
    
        /**
         * 获取账号
         */
        public String getAccount() {
            return et_name.getText().toString().trim();//去掉空格
        }
    
        /**
         * 获取密码
         */
        public String getPassword() {
            return et_password.getText().toString().trim();//去掉空格
        }
    
    
        /**
         * 保存用户选择“记住密码”和“自动登陆”的状态
         */
        private void loadCheckBoxState() {
            loadCheckBoxState(checkBox_password, checkBox_login);
        }
    
        /**
         * 保存按钮的状态值
         */
        public void loadCheckBoxState(CheckBox checkBox_password, CheckBox checkBox_login) {
    
            //获取SharedPreferences对象,使用自定义类的方法来获取对象
            SharedPreferencesUtils helper = new SharedPreferencesUtils(this, "setting");
    
            //如果设置自动登录
            if (checkBox_login.isChecked()) {
                //创建记住密码和自动登录是都选择,保存密码数据
                helper.putValues(
                        new SharedPreferencesUtils.ContentValue("remenberPassword", true),
                        new SharedPreferencesUtils.ContentValue("autoLogin", true),
                        new SharedPreferencesUtils.ContentValue("password", Base64Utils.encryptBASE64(getPassword())));
    
            } else if (!checkBox_password.isChecked()) { //如果没有保存密码,那么自动登录也是不选的
                //创建记住密码和自动登录是默认不选,密码为空
                helper.putValues(
                        new SharedPreferencesUtils.ContentValue("remenberPassword", false),
                        new SharedPreferencesUtils.ContentValue("autoLogin", false),
                        new SharedPreferencesUtils.ContentValue("password", ""));
            } else if (checkBox_password.isChecked()) {   //如果保存密码,没有自动登录
                //创建记住密码为选中和自动登录是默认不选,保存密码数据
                helper.putValues(
                        new SharedPreferencesUtils.ContentValue("remenberPassword", true),
                        new SharedPreferencesUtils.ContentValue("autoLogin", false),
                        new SharedPreferencesUtils.ContentValue("password", Base64Utils.encryptBASE64(getPassword())));
            }
        }
    
        /**
         * 是否可以点击登录按钮
         *
         * @param clickable
         */
        public void setLoginBtnClickable(boolean clickable) {
            mLoginBtn.setClickable(clickable);
        }
    
    
        /**
         * 显示加载的进度款
         */
        public void showLoading() {
            if (mLoadingDialog == null) {
                mLoadingDialog = new LoadingDialog(this, getString(R.string.loading), false);
            }
            mLoadingDialog.show();
        }
    
    
        /**
         * 隐藏加载的进度框
         */
        public void hideLoading() {
            if (mLoadingDialog != null) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mLoadingDialog.hide();
                    }
                });
    
            }
        }
    
    
        /**
         * CheckBox点击时的回调方法 ,不管是勾选还是取消勾选都会得到回调
         *
         * @param buttonView 按钮对象
         * @param isChecked  按钮的状态
         */
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (buttonView == checkBox_password) {  //记住密码选框发生改变时
                if (!isChecked) {   //如果取消“记住密码”,那么同样取消自动登陆
                    checkBox_login.setChecked(false);
                }
            } else if (buttonView == checkBox_login) {   //自动登陆选框发生改变时
                if (isChecked) {   //如果选择“自动登录”,那么同样选中“记住密码”
                    checkBox_password.setChecked(true);
                }
            }
        }
    
    
        /**
         * 监听回退键
         */
        @Override
        public void onBackPressed() {
            if (mLoadingDialog != null) {
                if (mLoadingDialog.isShowing()) {
                    mLoadingDialog.cancel();
                } else {
                    finish();
                }
            } else {
                finish();
            }
    
        }
    
        /**
         * 页面销毁前回调的方法
         */
        protected void onDestroy() {
            if (mLoadingDialog != null) {
                mLoadingDialog.cancel();
                mLoadingDialog = null;
            }
            super.onDestroy();
        }
    
    
        public void showToast(String msg) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(LoginActivity.this, msg, Toast.LENGTH_SHORT).show();
                }
            });
    
        }
    
    }
    
    
    

    你也可以参考我的项目的完整代码:https://github.com/liwenzhi/LoginDemo.git

    上面只是一个简单的示例,逻辑相对会有点啰嗦,因为这是我一个MVP框架程序中抠下来的代码。
    请求服务器也是创建子线程来模拟实现的。登录页面可以根据实际需求再修改修改。

    共勉:直面一辈子一次的人生路。

    展开全文
  • Android实现用户登录

    千次阅读 2019-01-19 16:32:03
    和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理。与 MIDlet 不同的是安装在 android 中的所有的 Activity 都是平等的。 Activity 的状态及状态间的转换 在 android 中,Activity ...

    (这里实现登录只判断用户名是否正确,密码原理和用户名完全相同,类比即可)

    Android代码类似java

    首先新建一个Android project(将自动生成很多文件夹。src中是所有代码,res中的layout中是所有布局代码)–>找到layout–>点击From Widges中的TextView拖动,Text Field的plain text,From Widges中的Button拖动到手机模拟框中想要的位置

    接下来修改添加的这些组件的信息(如名称)
    修改textview名称为“用户名”:
    在手机模拟框中双击textview,页面跳转至textview的代码,找到android:text="TextView"把TextView改为用户名
    同理修改Button名称为“登录”

    页面布局完成,接下来实现判断登录的功能

    与在java中相同,当需要对用户的行为进行相应响应时,需要增加监听器,要实现登录判断,需要在点击“登录”按钮时
    判断用户名密码是否正确,即给登录按钮增加一个监听器

    首先在res新建class,用来新建一个登录按钮监听器longinlisener
    监听器longinlisener实现接口OnClickListener并实现相应的方法onClick
    代码:

    //实现接口OnClickLisener(监听类)
    public class longinlisener implements OnClickListener{
    	//用户名输入框内容
    	EditText nameInput;
    	//activity
    	Activity main;
    
    	//构造函数,传入用户名和activity
    	public longinlisener(EditText nameInput, Activity main) {
    		super();
    		this.nameInput = nameInput;
    		this.main = main;
    	}
    
    
        //重写onclick方法,点击时获取输入框用户姓名,判断是否成果登录
    	public void onClick(View v){
    		//获取用户名
    		String name = nameInput.getText().toString();
    		//判断
    		if(name.equals("admin")){
    			//第一个: Activity
    			//第二个 : 显示的内容
    			//第三个:时长
    			Toast.makeText(main, "登陆成功", Toast.LENGTH_LONG ).show();
    			
    			Intent intent = new Intent();
            	//设置需要跳转的界面 参数1:当前Activity对象, 参数2:需要跳转的Activity类名.class
            	intent.setClass(main, DrawFrame.class);
            	//从当前界面进行跳转
            	main.startActivity(intent);		
    		}
    		else{
    			Toast.makeText(main, "用户名错误", Toast.LENGTH_LONG ).show();
    		}
    	}
    }
    

    然后回到主页面代码给按钮加上监听器
    代码:

    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //当前MainActivity对象
            final Activity main = MainActivity.this;
            //找出登录按钮
            Button loginBtn = (Button)this.findViewById(R.id.Login_Button);
            //找出用户名输入条
            EditText nameInput = (EditText)this.findViewById(R.id.nameInput);
            //创建监听器,监听用户名输入
            longinlisener loginL = new longinlisener(nameInput, this);
            //登录按钮添加监听器
            loginBtn.setOnClickListener(loginL); 
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
    }
    

    附上页面布局图:

    在这里插入图片描述
    代码完整,类似用户名可增设密码检验,还可以在监听器中改变要检验的其他信息,下一篇将实现页面跳转

    仍在入门,文章如有错误,欢迎指出

    展开全文
  • Android】实现登录、注册、数据库操作(极简洁)

    万次阅读 多人点赞 2020-06-14 19:56:53
    我最近又写了一篇文,是这篇文章的升级版,借此文引流一下: ...(2019-12-05更新:我已经把Gradle更新到3.5最新版了,dependencies也已经都迁移到androidx了,特此说明) https://github.com/littlecurl/AppProj...

    终于,尽管走下去,不必逗留着......

             我终于录视频了:《【Android】登录注册(简洁版)》

             —— 赞美无风险,吐槽别谨慎。


    我最近又写了一篇文,是这篇文章的升级版,借此文引流一下:

    《【Android】实现登录、注册、数据库操作(极复杂)》


    本篇源码地址(进去找JustLoginRegister):

    (2019-12-05更新:我已经把Gradle更新到3.5最新版了,dependencies也已经都迁移到androidx了,特此说明)

    https://github.com/littlecurl/AppProjects

    源代码里面有详细注释,切记要改一下gradle的版本号为本地gradle版本号,否则AndroidStduio会自行下载,浪费时间。


    忙着敲代码,忙着忙着就忘了吃中午饭了,两点半了才想起来,下不为例!

    这一篇我写的是用Android实现登录、注册、数据库操作的相关内容。

    先放最终效果图:

     

     

     

    先声明一下我的AndroidStudio的版本是:

              是时候写正文了!

              首先,当我们用AndroidStudio运行写好的Android程序的时候,也就是说,当按下那个绿色的小三角,启动小手机的时候,整个AndroidStudio会发生什么事情?这件事重要到,不搞清楚就学不会Android编程的地步。

                                                                     

      

            没错,就是你看到的这两个图标,折磨你到半死不活的两个玩意。

            当你熬到深夜两点,拖着疲惫的身躯敲完最后一行代码,颤颤巍巍的右手握着鼠标,眯瞪着双眼瞄准绿色的小三角,用尽平生最后一丝力气狠狠地单击一下鼠标左键 ,然后整个人葛优瘫在键盘上等待着它的运行,它到底发生了什么事情?这一切的背后,是人性的扭曲还是道德的沦丧?啊呸,重来。这一切的背后,是怎样的逻辑结构和运行原理?

            我尽我最大的努力来阐释一下我对此过程的拙见。

            首先看一下我这个Android程序的三级目录

     

            我已经标注好顺序了 0 → 1 → 2 → 3 → 4 总共5步

    步骤 0

    编译,具体Gradle是个啥,我也不清楚,我只知道Android是用Gradle进行编译的,编译的过程它会

    一、检查Gradle自身程序是否可用或版本是否最新

    二、启动各种我们桌面上看不见的程序,如果我没猜错的话,Gradle和Java、Python都差不多,大概就是一些java.exe、javac.exe之类的

    三、匹配各种依赖项,存在的检查完整性,不存在的去指定网站下载

    步骤 1

    解析注册XML,AndroidManifest.xml在Android中的作用和Windows中的注册表类似,每个Activity.java都需要去注册,而且里面有MAIN和LAUNCH设置,MAIN是:主要、入口的意思;LAUNCH是:启动、加载的意思。也就是说,AndroidManifest.xml是个导游,告诉AndroidStudio从哪开始运行,都有什么大致内容。

     步骤 2

    运行Activity,所谓Activity 翻译为 :活动、界面  一个Activity就是一个运行界面,AndroidStudio会启动在AndroidManifest.xml中被设置为 MAIN和LAUNCH 的Activity。首页启动之后,就是各个Activity之间的跳转通信了。

    步骤 3

    解析布局XML,在每个Activity创建(onCreate)时都会加载自己的xml布局文件,这些xml布局文件定义了对应Activity长什么样子。

    步骤 4

    解析完布局XML后,每个Activity的模样就确定了,然后就会返回Activity中执行类似响应点击、滑动之类的操作的代码

     

    源码下载地址:https://gitee.com/littlecurl/AppProjects/raw/master/JustLoginRegisterTest.zip

     

     

    大家加油!!!


     .


    看完如果觉得不错,留个赞再走。


    .

     

     

     

    展开全文
  • Android登录功能实现

    千次阅读 2017-08-08 10:50:15
    APP中必备功能登录的实现代码: 效果图:   返回数据: { "description": "登录成功", "flag": "success", "id": "457" } 1、登录布局activity_main: ...<RelativeLayout xmlns:android="http://schemas.

    APP中必备功能登录的实现代码:

    效果图:

                 


    请求成功后返回的数据:

    {
        "description": "登录成功",
        "flag": "success",
        "id": "457"
    }



    1、登录布局activity_main:

    <?xml version="1.0" encoding="utf-8"?>
    <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"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.wdl.login.MainActivity">
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_height="wrap_content">
            <EditText
                android:id="@+id/photo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入手机号"/>
            <EditText
                android:id="@+id/pwd"
                android:password="true"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入密码"/>
            <Button
                android:id="@+id/btn_log"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="登录"/>
        </LinearLayout>
    
    </RelativeLayout>
    

    2、MainActivity.java部分代码:

    代码中需要使用到okhttp架包,这里我就不展示怎么添加了(博文如何添加架包:http://blog.csdn.net/qq_26650589/article/details/73159658

    public class MainActivity extends AppCompatActivity {
        //用户名,密码
        private EditText photo, pwd;
        private Button btn;
        public  String result,is;
        private   String photostring,pwdstring;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            photo = (EditText) findViewById(R.id.photo);
            pwd = (EditText) findViewById(R.id.pwd);
            btn = (Button) findViewById(R.id.btn_log);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //获取文本框中的内容
                    photostring = photo.getText().toString().trim();
                    pwdstring = pwd.getText().toString().trim();
                    Okhttp(photostring, pwdstring);
    
    
                }
            });
        }
    
        public void Okhttp(final String pthot, final String pwd) {
            new Thread(new Runnable() {//开启线程
                @Override
                public void run() {
                    FormBody body =new FormBody.Builder()
                            .add("phone",pthot)   //提交参数电话和密码
                            .add("pwd",pwd)
                            .build();
                    Request request = new Request.Builder()
                            .url("http://192.168.1.6/Login/login")  //请求的地址
                            .post(body)
                            .build();
                    OkHttpClient client=new OkHttpClient();
    
                    try {
                        Response response = client.newCall(request).execute();
                        result = response.body().string();           //获得值
                        JX(result);    //解析
    
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
    
    
        }
        private void JX(String date){
            try {
                JSONObject jsonObject=new JSONObject(date);
                String flag = jsonObject.getString("flag");//获取返回值flag的内容
                if (flag.equals("success")){
                    is = jsonObject.getString("description");
    
                }else{
                    is = jsonObject.getString("description");
                }
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
        }
    
        private Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
    
                    case 1:
                        Toast.makeText(MainActivity.this, is,Toast.LENGTH_LONG).show();
                        break;
                }
            }
        };
    }
    还有不要忘记添加网络权限:

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>




    展开全文
  • Android实现简单的登陆注册跳转

    千次阅读 2020-09-09 18:56:28
    不知道是不是CSDN网站有bug 今天上传案例截图时一直有问题 以前在编辑标签也遇到不能输入中文的时候..... ... 登陆成功 登陆选项 登陆失败 首页 ...
  • android实现简单的登录页面

    万次阅读 2018-06-23 18:10:28
    最近在做一个小项目,然后要求要有登录页面.其实现在大多数app都是有登录页面的.所以就学习了一下怎样实现一个...这是一个登录界面基本的三个组件.如果你想把它做的更完美,更好看,功能更加完善,还可以加入其他的东西,...
  • Android制作登陆页面

    2019-06-06 16:56:40
    <?xml version="1.0" encoding="utf-8"?...android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/r...
  • android简单登陆和注册功能实现+SQLite数据库学习

    万次阅读 多人点赞 2019-06-12 16:39:50
    这里我只是建立了一个用简单的存储用户名和... MyDBHelper.java public class MyDBHelper extends SQLiteOpenHelper { public static final String CREATE_USERDATA="create table userData(" + "id integer p...
  • 在写一个小东西的时候碰到需要登陆一次就不用登陆了,想了很多方法,最后用的SharedPreferences。在最开始的时候可以初始化一下。例如:SharedPreferences.Editor editor = getSharedPreferences("data",...
  • 安卓简单登陆界面

    万次阅读 2018-09-25 21:48:11
    安卓登陆界面 前言:今天博主应老师要求做一个简单的安卓登陆界面,因为我学习安卓不久,此次制作也是花了不少时间,至此记录一下,本人菜鸟,还望有什么做得不好的地方请大家指教! 首先我们先来看一下最终的效果 ...
  • Android登录界面的实现

    千次阅读 2016-11-04 14:05:19
    最近由于项目需要,宝宝好久没搞Android啦,又是因为项目需要,现在继续弄Android,哎,说多了都是泪呀,别的不用多说,先搞一个登录界面练练手,登录界面可以说是Android项目中最常用也是最基本的,如果这个都搞...
  • 今天用QQ的时候想到了,不如用android studio 做一个类似于这样的登录软件。当然QQ的实现的功能特别复杂,UI界面也很多,不是单纯的一时新奇就可以做出来的。就是简单的实现了一些功能,做了三个界面;1.登录界面。2...
  • android一个登陆界面的设计

    万次阅读 2011-12-04 15:42:20
    说起登陆界面的设计,大家可能都会说这个挺简单的的啊,弄个布局,加几个控件一个登陆界面就出来了,但我今天想说一下自己在设计一个登陆界面时遇到的问题,而我这个登陆界面的设计重点就是在一个水平布局上放了一个...
  • Android漂亮好看的登陆,注册界面!程序源码

    千次下载 热门讨论 2020-07-30 23:32:27
    Android漂亮好看的登陆,注册界面!
  • Android Studio实现登录功能

    万次阅读 2018-11-30 20:10:43
    可以在新建项目的时候选择login模板 也可以新建空白模板后,新建Activity,选择loginActivity来使用login模板 也可以自定义自己的loginActivity 这里介绍第二种:新建空白...1、如果登陆过,则直接进入主界面;没...
  • Android studio新手:实现最新版QQ登陆界面

    万次阅读 多人点赞 2018-05-25 20:12:11
    最新版QQ登陆界面如下:代码实现效果如下:activity_main.xml代码如下:&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;android.support.constraint.ConstraintLayout xmlns:...
  • android如何设置一开始先加载LoginActivity(登陆)页面而不是MainActivity主页面 问题:我想一开始先加载登陆页面,然后再进入主页应该如何设置呢? 解决方法:打开androidmainfest.xml把下面这一串放到登陆的...
  • 登录界面源代码!

    万次阅读 2018-09-19 10:46:38
    &amp;amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;utf-8&amp;... android:layout_width=&amp;amp;quot;match_parent&amp;amp;quot
  • Android 高仿QQ 登陆界面

    万次阅读 多人点赞 2013-01-23 14:44:07
    先上图: 下面是布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent... android:background=
  • 目前开发app,想使用微信登录,但是不知道怎么回事,无法显示授权界面。 已经在开发者平台注册了账号,且应用已经... 开发环境 android studio 不知道要注意些或者要配置些什么,麻烦各位大侠给点意见,谢谢
1 2 3 4 5 ... 20
收藏数 41,770
精华内容 16,708
关键字:

android登陆