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>