SharedPreferences 저장소 + 시작 페이지 및 자동 로그인(흰색 화면 문제) + 몰입형 상태 표시줄 + MaterialCardView(둥근 모서리, 그림자)

1. SharedPreferences 스토리지.

SharedPreferences는 애플리케이션의 일부 공통 구성을 저장하는 데 사용되는 경량 스토리지 보조 클래스로, 키-값 쌍을 사용하여 데이터를 저장합니다.

SharedPreferences 저장소는 세 단계로 구현됩니다.

1. getSharedPreferences 객체의 edit() 메서드를 호출하여 SharedPreferences.Editor 객체를 가져옵니다.

2. putXXX() 메서드를 사용하여 SharedPreferences.Editor 개체에 데이터를 추가합니다.

3. apply() 또는 commit() 메서드를 호출하여 데이터를 제출합니다.

        //添加数据
        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //sp增加、修改数据
                //MODE_PRIVATE 别的程序不能读  "user"是文件名
                SharedPreferences sp=getSharedPreferences("user",MODE_PRIVATE);  //接口
                SharedPreferences.Editor editor=sp.edit(); //拿到接口方法的引用
                editor.putString("username1","湖南中医药大学!!");
                editor.putBoolean("isLogin",true);
                //editor.remove("username");删除
                editor.commit();
            }
        });
        //读取数据
        Button button2=findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //sp读取数据
                //MODE_PRIVATE 别的程序不能读 只有当前应用程序才能对 SharedPreferences 文件进行读写
                SharedPreferences sp=getSharedPreferences("user",MODE_PRIVATE);  //接口
                String username1=sp.getString("username1","");//第二个参数是默认值
                Boolean isLogin=sp.getBoolean("isLogin",false);
                Log.i("sp","username1=" + username1 + "isLogin=" + isLogin);
            }
        });

2. 환영 페이지 및 자동 로그인.

아이디어: SharedPreferences를 사용하여 로그인 상태를 저장하고 다음에 로그인할 때 로그인 상태를 읽으십시오.

1. 로그인 페이지:

                if(name.equals("千丘星")&&password.equals("123456")){
                    //跳转主页面+保存用户名+登录状态
                    SharedPreferences sp=getSharedPreferences("user",MODE_PRIVATE);  //接口
                    SharedPreferences.Editor editor=sp.edit(); //拿到接口方法的引用
                    editor.putString("username",name);
                    editor.putBoolean("isLogin",true);
                    editor.commit();

                    Intent intent=new Intent(Login_Activity.this,MainActivity.class);
                    startActivity(intent);
                }
                else {
                    Toast.makeText(Login_Activity.this,"登录失败",Toast.LENGTH_SHORT).show();
                }

 Intent 점프 전에 데이터 저장소를 배치해야 한다는 점은 주목할 가치가 있습니다. 점프가 먼저 이루어지면 활동이 종료되고 데이터가 저장될 시간이 없을 수 있습니다.

2. 환영 페이지 및 로그인 전환을 판단하고 자동으로 로그인합니다.

public class WelcomeActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        //要看到界面 onCreate需要执行完
        //线程
        Thread thread = new Thread() {
            @Override
            public void run() {
                super.run();
                //休眠
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                SharedPreferences sp = getSharedPreferences("user", MODE_PRIVATE);
                Boolean isLogin = sp.getBoolean("isLogin", false);
                Intent intent;
                if(isLogin) {
                    intent = new Intent(WelcomeActivity.this, MainActivity.class);
                } else {
                    intent = new Intent(WelcomeActivity.this, Login_Activity.class);
                }
                startActivity(intent);
            }
        };
        thread.start();
    }

}

흰 화면 문제가 발생하는 이유는 welcome 인터페이스를 보고 싶다면 onCreate를 실행해야 하고, 이 액티비티의 메인 쓰레드에 딜레이를 둔다면 메인 쓰레드가 실행될 때 흰 화면 문제가 나타나서 지연 실행이 완료되지 않았습니다. 해결책은 스레드를 추가하고 지연을 넣고 이 스레드에서 로그인 전환 동작을 판단하는 것입니다. 하위 스레드와 기본 스레드를 동기화하여 흰색 화면 현상을 해결하고 환영 인터페이스를 표시할 수 있습니다.

3. 몰입형 상태 표시줄.

몰입형 상태 표시줄에는 타사 프레임워크가 포함됩니다.

타사 URL:

http://https://github.com/gyf-dev/ImmersionBar

    //https://github.com/gyf-dev/ImmersionBar
    // 基础依赖包,必须要依赖
    implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
    // kotlin扩展(可选)
    implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2'
    // fragment快速实现(可选)已废弃
    implementation 'com.geyifeng.immersionbar:immersionbar-components:3.2.2'

페이지가 사용되는 활동을 호출하십시오.

        ImmersionBar.with(this)
      //          .statusBarColor(R.color.purple_200)  //状态栏颜色,不写默认透明
                .init();

몰입형 상태 표시줄을 사용하는 경우 활동 페이지의 상단이 전체 전화기 화면(배터리 등)의 상단이 된다는 점에 유의해야 합니다. 투명도가 설정되지 않은 경우 상단 상태 표시줄에 가려지지 않도록 컨트롤의 위치를 ​​조정하는 데 주의하세요.

4. MaterialCardView(둥근 모서리, 그림자).

 

 MaterialCardView 컨트롤을 직접 호출합니다. 내부에 레이아웃 레이어를 추가하고 컨트롤을 추가합니다.

  <!--    app:cardElevation="10dp" 设置阴影范围-->
    <com.google.android.material.card.MaterialCardView
        android:layout_width="350dp"
        android:layout_height="300dp"
        android:layout_marginBottom="20dp"
        android:elevation="8dp"
        app:cardCornerRadius="15dp"
        app:cardElevation="10dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="230dp"
                android:background="@drawable/i1" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="先生名叫秦霄贤"
                android:textColor="#000000"
                android:textSize="17sp" />
        </LinearLayout>
    </com.google.android.material.card.MaterialCardView>

추천

출처blog.csdn.net/qq_58451437/article/details/126914835