广告
返回顶部
首页 > 资讯 > 移动开发 >Android模拟手机QQ登录界面和主界面(含源码)
  • 928
分享到

Android模拟手机QQ登录界面和主界面(含源码)

手机qq界面源码Android 2022-06-06 14:06:19 928人浏览 八月长安
摘要

一、主要实现: 手机QQ登录界面的设计 Intent的显式跳转和隐式跳转 EditText点击小图标清除输入框内容 EditText密码输入框中密码可见与不可见的切换

一、主要实现: 手机QQ登录界面的设计 Intent的显式跳转和隐式跳转 EditText点击小图标清除输入框内容 EditText密码输入框中密码可见与不可见的切换 使用Fragment实现底部导航栏切换界面 PopupMenu的简单使用 二、实验环境: Android Studio 3.5.2 SDK版本:api 29 jdk 1.8 三、实现效果:

四、重点源码:

1.登录界面布局xml



2.登录界面代码java


package com.asyyy.androidkaifa.smallqq;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransfORMationMethod;
import android.text.method.PassWordTransformationMethod;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.asyyy.androidkaifa.R;
public class SmallQQ_LoginActivity extends AppCompatActivity {
    private EditText et_qqnum, et_qqpwd;
    private ImageView iv_login, et_delete_num, et_delete_pwd, et_pwd_see;
    private TextView tv_forgetpwd, tv_reGISter;
    private String qq_numtext, qq_pwdtext;
    private boolean pwdCanSee;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.smallqq_login_layout);
        findId();
        //QQ账号输入状态监听
        et_qqnum.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                qq_pwdtext = et_qqpwd.getText().toString().trim();
                qq_numtext = et_qqnum.getText().toString().trim();
                if(!TextUtils.isEmpty(qq_numtext) && !TextUtils.isEmpty(qq_pwdtext)){
                    //如果账号和密码都不为空,打开图片响应事件,并且更换图片
                    iv_login.setEnabled(true);
                    iv_login.setImageResource(R.drawable.Go_yes);
                }else {
                    iv_login.setEnabled(false);
                    iv_login.setImageResource(R.drawable.go_no);
                }
            }
        });
        //QQ密码输入状态监听
        et_qqpwd.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                qq_pwdtext = et_qqpwd.getText().toString().trim();
                qq_numtext = et_qqnum.getText().toString().trim();
                if(!TextUtils.isEmpty(qq_numtext) && !TextUtils.isEmpty(qq_pwdtext)){
                    //如果账号和密码都不为空,打开图片响应事件,并且更换图片
                    iv_login.setEnabled(true);
                    iv_login.setImageResource(R.drawable.go_yes);
                }else {
                    iv_login.setEnabled(false);
                    iv_login.setImageResource(R.drawable.go_no);
                }
            }
        });
        //QQ密码输入焦点监听
        et_qqpwd.setOnFocusChangeListener((v, hasFocus) -> {
            if(hasFocus){
                et_pwd_see.setVisibility(View.VISIBLE);
            }else {
                et_pwd_see.setVisibility(View.INVISIBLE);
            }
        });
        //密码可见小图标
        pwdCanSee = false;//true密码可见,false密码不可见
        et_pwd_see.setOnClickListener(v -> {
            if(pwdCanSee){
                //设置不可见
                et_qqpwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
                et_pwd_see.setImageResource(R.drawable.et_pwd_no);
                et_qqpwd.setSelection(et_qqpwd.getText().length());
                pwdCanSee = false;
            }else {
                //设置可见
                et_qqpwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                et_pwd_see.setImageResource(R.drawable.et_pwd_yes);
                et_qqpwd.setSelection(et_qqpwd.getText().length());
                pwdCanSee = true;
            }
        });
        //删除小图标
        EditTextUtils.clearButtonListener(et_qqnum, et_delete_num);
        EditTextUtils.clearButtonListener(et_qqpwd, et_delete_pwd);
        //登录
        //iv_login.setClickable(true);
        //setOnClickListener方法会默认把控件的setClickable设置为true。
        //设置login图片无事件响应
        iv_login.setEnabled(false);
        iv_login.setOnClickListener(v -> {
            qq_numtext = et_qqnum.getText().toString().trim();
            qq_pwdtext = et_qqpwd.getText().toString().trim();
            Toast.makeText(this,"登录成功!账号:" + qq_numtext + ",密码:" + qq_pwdtext,Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(SmallQQ_LoginActivity.this, SmallQQ_MainChatActivity.class);
            startActivity(intent);
        });
        //忘记密码
        tv_forgetpwd.setOnClickListener(v -> {
            Intent intent = new Intent();
            intent.setAction("SmallQQ.error");
            startActivity(intent);
        });
        //用户注册
        tv_register.setOnClickListener(v -> startActivity(new Intent().setAction("SmallQQ.error")));
    }
    private void findId(){
        et_qqnum = findViewById(R.id.qq_num);
        et_qqpwd = findViewById(R.id.qq_pwd);
        iv_login = findViewById(R.id.qq_login);
        tv_forgetpwd = findViewById(R.id.qq_forgetpwd);
        tv_register = findViewById(R.id.qq_register);
        et_delete_num = findViewById(R.id.iv_et_num_delete);
        et_delete_pwd = findViewById(R.id.iv_et_pwd_delete);
        et_pwd_see = findViewById(R.id.iv_et_pwd_see);
    }
}

3.显示主界面布局xml



4.显示主界面代码java


package com.asyyy.androidkaifa.smallqq;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.menu.MenuPopupHelper;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import com.asyyy.androidkaifa.R;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SmallQQ_MainChatActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView user_title, bar_news, bar_friend, bar_dongtai;
    private ImageView menu_add;
    private NewsFragment newsFragment;
    private FriendFragment friendFragment;
    private DongtaiFragment dongtaiFragment;
    private FragmentManager fManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.smallqq_mainchat_layout);
        user_title = findViewById(R.id.user_title);
        bar_news = findViewById(R.id.tvbar_user);
        bar_friend = findViewById(R.id.tvbar_friend);
        bar_dongtai = findViewById(R.id.tvbar_dongtai);
        menu_add  = findViewById(R.id.menu_add);
        bar_news.setOnClickListener(this);
        bar_friend.setOnClickListener(this);
        bar_dongtai.setOnClickListener(this);
        fManager = getSupportFragmentManager();
        bar_news.performClick();//模拟一次点击,既进去后选择消息界面
        menu_add.setOnClickListener(v -> {
            PopupMenu popupMenu = new PopupMenu(SmallQQ_MainChatActivity.this, menu_add);
            popupMenu.getMenuInflater().inflate(R.menu.menu_add,popupMenu.getMenu());
            popupMenu.setOnMenuItemClickListener(item -> {
                String str = "";
                switch (item.getItemId()){
                    case R.id.menu_add1:
                        str = item.getTitle() + "";
                        break;
                    case R.id.menu_add2:
                        str = item.getTitle() + "";
                        break;
                    case R.id.menu_add3:
                        str = item.getTitle() + "";
                        break;
                    case R.id.menu_add4:
                        str = item.getTitle() + "";
                        break;
                    case R.id.menu_add5:
                        str = item.getTitle() + "";
                        break;
                    case R.id.menu_add6:
                        str = item.getTitle() + "";
                        break;
                }
                Toast.makeText(SmallQQ_MainChatActivity.this,"你点击了 " + str, Toast.LENGTH_SHORT).show();
                return true;
            });
            popupMenu.show();
        });
    }
    //重置所有文本的选中状态
    private void setSelected(){
        bar_news.setSelected(false);
        bar_friend.setSelected(false);
        bar_dongtai.setSelected(false);
    }
    //隐藏所有Fragment
    private void hideallFragment(FragmentTransaction transaction){
        if(newsFragment != null) transaction.hide(newsFragment);
        if(friendFragment != null) transaction.hide(friendFragment);
        if(dongtaiFragment != null) transaction.hide(dongtaiFragment);
    }
    @Override
    public void onClick(View v) {
        //FragmentTransaction只能使用一次
        //每次使用都要调用FragmentManager的beginTransaction()方法获得FragmentTransaction事务对象
        FragmentTransaction transaction = fManager.beginTransaction();
        hideAllFragment(transaction);
        switch (v.getId()){
            case R.id.tvbar_user:
                setSelected();
                bar_news.setSelected(true);
                user_title.setText("消息");
                if(newsFragment == null){
                    newsFragment = new NewsFragment();
                    transaction.add(R.id.fragment_content, newsFragment);
                }else {
                    transaction.show(newsFragment);
                }
                break;
            case R.id.tvbar_friend:
                setSelected();
                bar_friend.setSelected(true);
                user_title.setText("联系人");
                if(friendFragment == null){
                    friendFragment = new FriendFragment();
                    transaction.add(R.id.fragment_content, friendFragment);
                }else {
                    transaction.show(friendFragment);
                }
                break;
            case R.id.tvbar_dongtai:
                setSelected();
                bar_dongtai.setSelected(true);
                user_title.setText("动态");
                if(dongtaiFragment == null){
                    dongtaiFragment = new DongtaiFragment();
                    transaction.add(R.id.fragment_content, dongtaiFragment);
                }else {
                    transaction.show(dongtaiFragment);
                }
                break;
        }
        //把newsFragment添加到Activity中的指定位置,最后调用commit()或者commitAllowingStateLoss()
        transaction.commitAllowingStateLoss();
    }
}
五、源码下载:

免积分下载(包含源码,用到的各种图片)

https://download.csdn.net/download/qq_40907345/12377480

Angela-Y 原创文章 31获赞 86访问量 10万+ 关注 私信 展开阅读全文
作者:Angela-Y


--结束END--

本文标题: Android模拟手机QQ登录界面和主界面(含源码)

本文链接: https://www.lsjlt.com/news/29706.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作