Browse Source

add splash & change login view

main
MTing 3 weeks ago
parent
commit
0c5098c151
  1. 2
      app/src/main/AndroidManifest.xml
  2. 48
      app/src/main/java/com/ouxuan/oxface/MainActivity.java
  3. 20
      app/src/main/res/drawable/gradient_button_selector.xml
  4. 10
      app/src/main/res/drawable/ic_eye_closed.xml
  5. 10
      app/src/main/res/drawable/ic_eye_open.xml
  6. 20
      app/src/main/res/drawable/splash_background.xml
  7. 384
      app/src/main/res/layout/activity_main.xml
  8. 6
      app/src/main/res/values/strings.xml
  9. 9
      app/src/main/res/values/themes.xml

2
app/src/main/AndroidManifest.xml

@ -15,7 +15,7 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.OxFaceLogin">
android:theme="@style/Theme.OxFaceLogin.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

48
app/src/main/java/com/ouxuan/oxface/MainActivity.java

@ -3,21 +3,27 @@ package com.ouxuan.oxface;
import androidx.appcompat.app.AppCompatActivity;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.text.InputType;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText editTextUsername;
private EditText editTextPassword;
private Button buttonLogin;
private View buttonLogin;
private ImageView imageViewPasswordToggle;
private Toast currentToast; // 用于管理Toast显示状态
private boolean isPasswordVisible = false; // 密码显示状态
@Override
protected void onCreate(Bundle savedInstanceState) {
// 在setContentView之前切换到正常主题解决白屏问题
setTheme(R.style.Theme_OxFaceLogin);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@ -34,12 +40,16 @@ public class MainActivity extends AppCompatActivity {
// 设置按钮触摸动画
setupButtonAnimation();
// 设置密码显示/隐藏切换
setupPasswordToggle();
}
private void initViews() {
editTextUsername = findViewById(R.id.editTextUsername);
editTextPassword = findViewById(R.id.editTextPassword);
buttonLogin = findViewById(R.id.buttonLogin);
imageViewPasswordToggle = findViewById(R.id.imageViewPasswordToggle);
}
private void setupLoginButton() {
@ -88,7 +98,7 @@ public class MainActivity extends AppCompatActivity {
private boolean validateInput(String username, String password) {
if (username.isEmpty()) {
showToast("请输入用户名");
showToast("请输入登录账号");
editTextUsername.requestFocus();
return false;
}
@ -132,4 +142,36 @@ public class MainActivity extends AppCompatActivity {
currentToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
currentToast.show();
}
/**
* 设置密码显示/隐藏切换功能
*/
private void setupPasswordToggle() {
imageViewPasswordToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
togglePasswordVisibility();
}
});
}
/**
* 切换密码的显示/隐藏状态
*/
private void togglePasswordVisibility() {
if (isPasswordVisible) {
// 当前是显示状态切换为隐藏
editTextPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
imageViewPasswordToggle.setImageResource(R.drawable.ic_eye_closed);
isPasswordVisible = false;
} else {
// 当前是隐藏状态切换为显示
editTextPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
imageViewPasswordToggle.setImageResource(R.drawable.ic_eye_open);
isPasswordVisible = true;
}
// 保持光标在文本末尾
editTextPassword.setSelection(editTextPassword.getText().length());
}
}

20
app/src/main/res/drawable/gradient_button_selector.xml

@ -2,12 +2,12 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按下状态 -->
<item android:state_pressed="true">
<shape>
<shape android:shape="rectangle">
<gradient
android:startColor="#E6A644"
android:centerColor="#E68A00"
android:endColor="#D17100"
android:angle="45"
android:startColor="#E8C48A"
android:centerColor="#E09C35"
android:endColor="#CC8A2E"
android:angle="270"
android:type="linear" />
<corners android:radius="25dp" />
</shape>
@ -15,12 +15,12 @@
<!-- 正常状态 -->
<item>
<shape>
<shape android:shape="rectangle">
<gradient
android:startColor="#FFB74D"
android:centerColor="#FF9800"
android:endColor="#F57C00"
android:angle="45"
android:startColor="#FCDA9E"
android:centerColor="#F9C56B"
android:endColor="#F7B23E"
android:angle="270"
android:type="linear" />
<corners android:radius="25dp" />
</shape>

10
app/src/main/res/drawable/ic_eye_closed.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/secondary_text_color"
android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/>
</vector>

10
app/src/main/res/drawable/ic_eye_open.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/secondary_text_color"
android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
</vector>

20
app/src/main/res/drawable/splash_background.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 渐变背景 -->
<item>
<shape>
<gradient
android:startColor="#E8F5E8"
android:centerColor="#F0F9F0"
android:endColor="#FAFEFB"
android:angle="135"
android:type="linear" />
</shape>
</item>
<!-- 可选:添加Logo居中显示 -->
<item android:gravity="center">
<bitmap android:src="@mipmap/ic_launcher"
android:gravity="center" />
</item>
</layer-list>

384
app/src/main/res/layout/activity_main.xml

@ -1,218 +1,242 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_background"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/min_screen_height"
android:paddingStart="32dp"
android:paddingEnd="32dp"
tools:context=".MainActivity">
<!-- Logo容器 -->
<androidx.cardview.widget.CardView
android:id="@+id/logoContainer"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="80dp"
app:cardCornerRadius="60dp"
app:cardElevation="12dp"
app:cardBackgroundColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/imageViewLogo"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:src="@drawable/ic_login_logo"
android:contentDescription="@string/app_logo" />
</androidx.cardview.widget.CardView>
<!-- 用户名输入框 -->
<androidx.cardview.widget.CardView
android:id="@+id/usernameCard"
<!-- 登录内容容器 - 垂直居中 -->
<LinearLayout
android:id="@+id/loginContentContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
app:cardCornerRadius="25dp"
app:cardElevation="4dp"
app:cardBackgroundColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
android:orientation="vertical"
android:gravity="center_horizontal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/bottomInfoLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/logoContainer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
app:layout_constraintEnd_toEndOf="parent">
<!-- Logo容器 -->
<androidx.cardview.widget.CardView
android:id="@+id/logoContainer"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginBottom="40dp"
app:cardCornerRadius="40dp"
app:cardElevation="8dp"
app:cardBackgroundColor="@color/white">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_person"
android:layout_marginEnd="12dp"
android:contentDescription="用户图标" />
<EditText
android:id="@+id/editTextUsername"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="@string/hint_username"
android:inputType="text"
android:maxLines="1"
android:background="@android:color/transparent"
android:textColor="@color/primary_text_color"
android:textColorHint="@color/secondary_text_color"
android:textSize="16sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- 密码输入框 -->
<androidx.cardview.widget.CardView
android:id="@+id/passwordCard"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardCornerRadius="25dp"
app:cardElevation="4dp"
app:cardBackgroundColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/usernameCard">
<LinearLayout
android:id="@+id/imageViewLogo"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:src="@drawable/ic_login_logo"
android:contentDescription="@string/app_logo" />
</androidx.cardview.widget.CardView>
<!-- 用户名输入框 -->
<androidx.cardview.widget.CardView
android:id="@+id/usernameCard"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_lock"
android:layout_marginEnd="12dp"
android:contentDescription="密码图标" />
<EditText
android:id="@+id/editTextPassword"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:maxLines="1"
android:background="@android:color/transparent"
android:textColor="@color/primary_text_color"
android:textColorHint="@color/secondary_text_color"
android:textSize="16sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- 提示文字 -->
<TextView
android:id="@+id/textViewHint"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="登录账号密码请从PC端后台管理【设备运营管理平台管理】里获取"
android:textColor="@color/white"
android:textSize="12sp"
android:gravity="center"
android:alpha="0.8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordCard" />
<!-- 登录按钮 -->
<androidx.cardview.widget.CardView
android:id="@+id/loginButtonCard"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
app:cardCornerRadius="25dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewHint">
<Button
android:id="@+id/buttonLogin"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardCornerRadius="25dp"
app:cardElevation="4dp"
app:cardBackgroundColor="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_person"
android:layout_marginEnd="12dp"
android:contentDescription="用户图标" />
<EditText
android:id="@+id/editTextUsername"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="@string/hint_username"
android:inputType="text"
android:maxLines="1"
android:background="@android:color/transparent"
android:textColor="@color/primary_text_color"
android:textColorHint="@color/secondary_text_color"
android:textSize="16sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- 密码输入框 -->
<androidx.cardview.widget.CardView
android:id="@+id/passwordCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
app:cardCornerRadius="25dp"
app:cardElevation="4dp"
app:cardBackgroundColor="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_lock"
android:layout_marginEnd="12dp"
android:contentDescription="密码图标" />
<EditText
android:id="@+id/editTextPassword"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:maxLines="1"
android:background="@android:color/transparent"
android:textColor="@color/primary_text_color"
android:textColorHint="@color/secondary_text_color"
android:textSize="16sp" />
<ImageView
android:id="@+id/imageViewPasswordToggle"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_eye_closed"
android:layout_marginStart="8dp"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:contentDescription="密码显示切换" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- 提示文字 -->
<TextView
android:id="@+id/textViewHint"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/login_button"
android:textSize="18sp"
android:textStyle="bold"
android:layout_height="wrap_content"
android:layout_marginBottom="32dp"
android:text="登录账号密码请从PC端后台管理【设备运营管理平台管理】里获取"
android:textColor="@color/white"
android:background="@drawable/gradient_button_selector"
android:elevation="0dp"
android:stateListAnimator="@null" />
android:textSize="11sp"
android:gravity="center"
android:alpha="0.8" />
</androidx.cardview.widget.CardView>
<!-- 登录按钮 -->
<androidx.cardview.widget.CardView
android:id="@+id/loginButtonCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="25dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent">
<TextView
android:id="@+id/buttonLogin"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@string/login_button"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/white"
android:background="@drawable/gradient_button_selector"
android:gravity="center"
android:clickable="true"
android:focusable="true"
android:elevation="0dp" />
</androidx.cardview.widget.CardView>
<!-- 版本信息 -->
</LinearLayout>
<!-- 底部信息区域 -->
<LinearLayout
android:id="@+id/bottomInfoLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="horizontal"
android:layout_marginBottom="12dp"
android:orientation="vertical"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<!-- 设备ID -->
<TextView
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="重启设备"
android:text="设备ID: c9cb00145a2ac56f"
android:textColor="@color/white"
android:textSize="12sp"
android:alpha="0.7" />
android:textSize="10sp"
android:alpha="1.0"
android:layout_marginBottom="4dp" />
<TextView
<!-- 版本和重启 -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Version 1.8.3.9"
android:textColor="@color/white"
android:textSize="12sp"
android:alpha="0.7" />
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/textRestart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重启设备"
android:textColor="@color/white"
android:textSize="10sp"
android:alpha="1.0"
android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:padding="8dp" />
<View
android:layout_width="1dp"
android:layout_height="12dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="@color/white"
android:alpha="0.3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Version 1.8.3.9"
android:textColor="@color/white"
android:textSize="10sp"
android:alpha="1.0" />
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:text="本机设备ID:c9cb00145a2ac56f"
android:textColor="@color/white"
android:textSize="12sp"
android:alpha="0.7"
android:gravity="end"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:id="@+id/linearLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

6
app/src/main/res/values/strings.xml

@ -1,9 +1,9 @@
<resources>
<string name="app_name">OxFace登录</string>
<string name="app_name">OxFace</string>
<string name="app_logo">应用图标</string>
<string name="login_logo">登录图标</string>
<string name="hint_username">用户名</string>
<string name="hint_password">密码</string>
<string name="hint_username">请输入登录账号</string>
<string name="hint_password">请输入密码</string>
<string name="login_button">登录</string>
<string name="forgot_password">忘记密码?</string>
<string name="login_success">登录成功!</string>

9
app/src/main/res/values/themes.xml

@ -31,4 +31,13 @@
<item name="hintTextColor">@color/primary_color</item>
<item name="android:layout_marginBottom">16dp</item>
</style>
<!-- 启动主题 - 解决白屏问题 -->
<style name="Theme.OxFaceLogin.Splash" parent="Theme.OxFaceLogin">
<item name="android:windowBackground">@drawable/splash_background</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>
Loading…
Cancel
Save