如何使用Android Studio开发用户登录界面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Android Studio开发用户登录界面相关的知识,希望对你有一定的参考价值。

    右键点击new-->Module,Module相当于新建了一个项目。如图所示

    选择android Application,点击next

    将My Module 和app改成自己项目相应的名字,同时选择支持的Android版本

    这一步我们选择Blank Activity,自己手动编写登录界面,而不依赖系统内置的Login Activity,一直点击next,最后点击finish就完成了项目的创建

    在project下我们可以看到出现了我们刚才创建的login项目

    展开res/layout,点击打开activity_main.xml文件,在这个文件里我们将完成登录界面的编写

    这是初始的主界面,还没有经过我们编写的界面,Android Studio有一个很强大的预览功能,相当给力

    将activity_main.xml的代码替换成如下代码:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_

    android:layout_

    android:gravity="center_vertical"

    android:stretchColumns="0,3">

    <TableRow>

        <TextView />

        <TextView

            android:text="账   号:"

            android:layout_

            android:layout_

            android:textSize="24px"

            />

        <EditText

            android:id="@+id/account"

            android:layout_

            android:layout_

            android:textSize="24px"

            android:minWidth="220px"/>

        <TextView />

    </TableRow>

    <TableRow android:layout_marginTop="20px">

        <TextView />

        <TextView

            android:text="密  码:"

            android:layout_

            android:layout_


            />

        <EditText

            android:id="@+id/pwd"

            android:layout_

            android:layout_

            android:minWidth="220px"

            android:textSize="24px"

            android:inputType="textPassword"/>

        <TextView />

    </TableRow>

    <TableRow android:layout_marginTop="20px">

        <TextView />

        <Button

            android:id="@+id/login"

            android:text="登录"

            android:layout_

            android:layout_

            />

        <Button

            android:id="@+id/quit"

            android:text="退出"

            android:layout_

            android:layout_/>

        <TextView />

    </TableRow>

</TableLayout>

预览效果如图

使用Android 手机进行测试,大功告成

参考技术A 您好,很高兴能帮助您

我们项目的前提是你已经将基本的运行环境及sdk都已经安装好了,读者可自行百度环境配置相关内容,本文不再赘述。右键点击new-->Module,Module相当于新建了一个项目。

选择Android Application,点击next

将My Module 和app改成自己项目相应的名字,同时选择支持的Android版本

这一步我们选择Blank Activity,自己手动编写登录界面,而不依赖系统内置的Login Activity,一直点击next,最后点击finish就完成了项目的创建

在project下我们可以看到出现了我们刚才创建的login项目

展开res/layout,点击打开activity_main.xml文件,在这个文件里我们将完成登录界面的编写

这是初始的主界面,还没有经过我们编写的界面,Android Studio有一个很强大的预览功能,相当给力

我们将activity_main.xml的代码替换成如下代码:
<TableLayout xmlns:android="
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:stretchColumns="0,3">
<TableRow>
<TextView />
<TextView
android:text="账 号:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24px"
/>
<EditText
android:id="@+id/account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24px"
android:minWidth="220px"/>
<TextView />
</TableRow>
<TableRow android:layout_marginTop="20px">
<TextView />
<TextView
android:text="密 码:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

/>
<EditText
android:id="@+id/pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="220px"
android:textSize="24px"
android:inputType="textPassword"/>
<TextView />
</TableRow>
<TableRow android:layout_marginTop="20px">
<TextView />
<Button
android:id="@+id/login"
android:text="登录"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/quit"
android:text="退出"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView />
</TableRow>
</TableLayout>

使用Android 手机进行测试,大功告成

用户登录但未登录时的Android Studio按钮onclick重定向条件

【中文标题】用户登录但未登录时的Android Studio按钮onclick重定向条件【英文标题】:Android studio button onclick redirect condition when user is logged in and not logged in 【发布时间】:2021-07-13 13:36:16 【问题描述】:

我是编码新手,我需要有关此特定功能的帮助,如果有人可以提供帮助,我将不胜感激。

我正在开发一个 android studio 项目,并且在我的活动(假设为活动 A)上,我想放置一个按钮,单击该按钮将打开假设活动 B。

我已经能够设置 onclick 功能和意图在按钮单击时打开 Activity B。

但现在我想要的是,如果用户未登录,那么当单击该按钮时它应该将用户带到 LoginActivity,但是当用户登录时它应该将用户直接带到 Activity B。

请问我怎样才能在我的活动中实现这一点?感谢期待解决方案。

下面是我的登录活动代码


import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;


import com.sckoolboy.premiumapp.R;

public class Login extends AppCompatActivity 
    EditText mEmail,mPassword;
    Button mCreateBtn,mLoginBtn;
    TextView forgotTextLink;
    ProgressBar progressBar;
    FirebaseAuth fAuth;
    private FirebaseAuth auth;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        auth = FirebaseAuth.getInstance();

        if (auth.getCurrentUser() != null) 
            startActivity(new Intent(Login.this, Main1.class));
            finish();
        
        setContentView(R.layout.activity_login);

        mEmail = findViewById(R.id.Email);
        mPassword = findViewById(R.id.password);
        progressBar = findViewById(R.id.progressBar);
        fAuth = FirebaseAuth.getInstance();
        mLoginBtn = findViewById(R.id.loginBtn);
        mCreateBtn = findViewById(R.id.createText);
        forgotTextLink = findViewById(R.id.forgotPassword);


        mLoginBtn.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                String email = mEmail.getText().toString().trim();
                String password = mPassword.getText().toString().trim();

                if(TextUtils.isEmpty(email))
                    mEmail.setError("Email is Required.");
                    return;
                

                if(TextUtils.isEmpty(password))
                    mPassword.setError("PremiumKey is Required.");
                    return;
                

                if(password.length() < 6)
                    mPassword.setError("PremiumKey not valid");
                    return;
                

                progressBar.setVisibility(View.VISIBLE);

                // authenticate the user

                fAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() 
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) 
                        if(task.isSuccessful())
                            Toast.makeText(Login.this, "Premium Successfully Unlocked", Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(getApplicationContext(),Main1.class));
                        else 
                            Toast.makeText(Login.this, "Error ! " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                        

                    
                );

            
        );

        mCreateBtn.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                startActivity(new Intent(getApplicationContext(),Register.class));
            
        );

        forgotTextLink.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                final EditText resetMail = new EditText(v.getContext());
                final AlertDialog.Builder passwordResetDialog = new AlertDialog.Builder(v.getContext());
                passwordResetDialog.setTitle("Reset Password ?");
                passwordResetDialog.setMessage("Enter Your Email To Received Reset Link.");
                passwordResetDialog.setView(resetMail);

                passwordResetDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 
                        // extract the email and send reset link
                        String mail = resetMail.getText().toString();
                        fAuth.sendPasswordResetEmail(mail).addOnSuccessListener(new OnSuccessListener<Void>() 
                            @Override
                            public void onSuccess(Void aVoid) 
                                Toast.makeText(Login.this, "Reset Link Sent To Your Email.", Toast.LENGTH_SHORT).show();
                            
                        ).addOnFailureListener(new OnFailureListener() 
                            @Override
                            public void onFailure(@NonNull Exception e) 
                                Toast.makeText(Login.this, "Error ! Reset Link is Not Sent" + e.getMessage(), Toast.LENGTH_SHORT).show();
                            
                        );

                    
                );

                passwordResetDialog.setNegativeButton("No", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 
                        // close the dialog
                    
                );

                passwordResetDialog.create().show();

            
        );


    

使用 firebase 身份验证,我该如何从这里开始

【问题讨论】:

你好。只需使用 IF 条件拆分程序执行(onClickEvent 处理程序的执行): if (loggedIn) startActivity (B) else startActivity(loginActivity) 你能分享你已经拥有的代码吗?您使用的是哪种身份验证? @jonas 我仍在登录活动屏幕上工作,但我同时创建了活动 A 和 B。登录使用 firebase 身份验证。那么,当点击我的应用程序上的任何活动的按钮时,我可以使用任何代码来指导用户是否登录? 如果您使用 Firebase 身份验证,您可以使用:***.com/questions/37873608/… 代码! 请问当按钮被按下并且用户登录时会发生什么? 【参考方案1】:

您可以使用 if 块在启动不同活动之间切换,具体取决于用户是否登录。

例如,假设loggedIn是存储用户是否登录的布尔变量,button是按钮,

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(v -> 
if (loggedIn) 
    // Start ActivityB, user has logged in
    Intent intent = new Intent(/* context here */, Main1.class);
    startActivity(intent);
 else 
    // Redirect to LoginActivity, user hasn't logged in
    Intent intent = new Intent(/* context here */, Login.class);
    startActivity(intent);

);

以及新活动的 XML 设计:

<!-- Root layout above..... -->
<Button
    android:text="Log in"
    android:id="@+id/button"/>
<!--Other elements below -->

您可以从 Firebase 的 API 获取登录条件,(参考https://***.com/a/44585789/12204281),方法调用应该是: FirebaseAuth.getInstance().getCurrentUser(),当用户未登录时,此方法返回null

因此您可以使用等号运算符检查该值是否为空并将其存储在loggedIn

boolean loggedIn = FirebaseAuth.getInstance().getCurrentUser() != null;

【讨论】:

我已将我的 LoginActivity 的代码添加到问题中,您是否可以检查是否可以根据您的答案实施此解决方案'假设登录是存储用户是否登录的布尔变量" ....... 您的代码似乎没问题。应用程序在 Login 活动上启动,然后如果用户已经登录,他/她将被重定向到 Main1 活动。 是的,但这是我真正想要的,我想在该活动上创建一个新活动,它将包含一个按钮,如果用户未登录我希望它来到这个 LoginActivity,但是如果单击该按钮时用户已登录,则应打开另一个活动。我的目标是确保我创建的新活动只有已登录的活动才能访问 我已经添加了如何实现新活动,可以吗? 我不知道为什么,但我在最终实现过程中仍然遇到了一些代码问题,如果在我添加代码的 Activity 类上显示无法解析符号 'loggedIn' 该怎么办

以上是关于如何使用Android Studio开发用户登录界面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Android Studio开发用户登录界面

如何使用Android Studio开发用户登录界面

如何使用Android Studio开发用户登录界面

如何使用Android Studio开发用户登录界面

如何使用Android Studio开发用户登录界面

如何使用Android Studio开发用户登录界面