#java #android #android-studio
#java #Android #android-studio
Вопрос:
Пока я запускаю эти коды, в моем logcat не отображается ошибка, но когда я нажимаю на текст «Новый участник? РЕГИСТРАЦИЯ», он не отображал страницу регистрации, вместо этого он возвращается к заставке на моем устройстве. Я думаю, что это, скорее всего, проблема с идентификатором, но я не уверен, что именно вызвало эту проблему.
Мой activity_login.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".Login"
android:orientation="vertical"
android:background="#fff"
android:padding="20dp">
<ImageView
android:id="@ id/image_logo"
android:layout_width="101dp"
android:layout_height="69dp"
android:transitionName="logo_logo"
android:src="@drawable/logo_new"/>
<TextView
android:id="@ id/logo_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/bungee"
android:text="Hi, Welcome Back!"
android:transitionName="logo_text"
android:textColor="#ff8e88"
android:textSize="40sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:transitionName="logo_desc"
android:text="Sign in to continue"
android:textSize="18sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@ id/username"
android:transitionName="user_tran"
android:hint="Username">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@ id/password"
android:hint="Password"
android:transitionName="password_tran"
app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<CheckBox
style="@style/Widget.AppCompat.CompoundButton.CheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Remember Me" />
<Button
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_margin="3dp"
android:background="#00000000"
android:elevation="0dp"
android:text="Forget Password" />
<Button
android:id="@ id/btnLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="#ff8e88"
android:text="Log In"
android:transitionName="button_tran"
android:textColor="#fff" />
<Button
android:id="@ id/register_screen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_margin="5dp"
android:background="#00000000"
android:elevation="0dp"
android:fontFamily="@font/antic"
android:text="New Member? REGISTER"
android:textColor="#000"
android:transitionName="login_register_tran"/>
</LinearLayout>
</LinearLayout>
Мой Login.java:
public class Login extends AppCompatActivity {
Button callRegister, login_btn;
ImageView image;
TextView logoText, sloganText;
TextInputLayout username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.
FLAG_FULLSCREEN);
setContentView(R.layout.activity_login);
callRegister = findViewById(R.id.register_screen);
image = findViewById(R.id.image_logo);
logoText = findViewById(R.id.logo_name);
sloganText = findViewById(R.id.slogan_name);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
login_btn = findViewById(R.id.login_btn);
callRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Login.this,Register.class);
Pair[] pairs = new Pair[7];
pairs[0] = new Pair<View,String>(image,"logo_logo");
pairs[1] = new Pair<View,String>(logoText,"logo_text");
pairs[2] = new Pair<View,String>(sloganText,"logo_desc");
pairs[3] = new Pair<View,String>(username,"user_tran");
pairs[4] = new Pair<View,String>(password,"password_tran");
pairs[5] = new Pair<View,String>(login_btn,"button_tran");
pairs[6] = new Pair<View,String>(callRegister,"login_register_tran");
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
ActivityOptions options =
ActivityOptions.makeSceneTransitionAnimation(Login.this,pairs);
startActivity(intent, options.toBundle());
}
}
});
}
}
Мой activity_register.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".Register"
android:orientation="vertical"
android:background="#fff"
android:padding="10dp">
<ImageView
android:layout_width="101dp"
android:layout_height="69dp"
android:transitionName="logo_logo"
android:src="@drawable/logo_new"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-10dp"
android:fontFamily="@font/bungee"
android:text="Welcome"
android:transitionName="logo_text"
android:textColor="#ff8e88"
android:textSize="30sp" />
<TextView
android:id="@ id/slogan_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Register to start"
android:textSize="16sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="10dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
app:counterEnabled="true"
app:counterMaxLength="15"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/phoneNo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Phone Number"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@ id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
app:passwordToggleEnabled="true"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="User Type"
android:layout_marginLeft="5dp"
android:textSize="17dp"/>
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="User" />
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Guardian"/>
<Button
android:id="@ id/login_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:background="#ff8e88"
android:text="Register"
android:textColor="#fff" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Already have an account? LOGIN"
android:background="#00000000" />
</LinearLayout>
Мой Register.java:
public class Register extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
}
}
Комментарии:
1. не могли бы вы попробовать удалить `ActivityOptions.makeSceneTransitionAnimation(Login.this, pairs);` и посмотреть, работает ли это? Также убедитесь, что ваше устройство или виртуальная машина выше, чем Lollipop 21
Ответ №1:
В вашем коде были некоторые проблемы. Ваши имена в идентификаторе из xml в вашу java были непоследовательными. например:
<TextView
android:id="@ id/logo_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/bungee"
android:text="Hi, Welcome Back!"
android:transitionName="logo_text"
android:textColor="#ff8e88"
android:textSize="40sp"/>
обратите внимание на ваше имя в идентификаторе android:id="@ id/logo_name"
, затем в вашем java-файле оно было правильным, но вы определили slogan
его как идентификатор, но у вас нет имени xml slogan
, поэтому я создал новый проект и все скопировал. Поэтому я использую немного другое соглашение об именовании между классами, но оно по-прежнему показывает различия.
MainActivity.java ака Login.java
public class MainActivity extends AppCompatActivity {
Button callRegister, login_btn;
ImageView image;
TextView logoText, sloganText;
TextInputLayout username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.
FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
callRegister = findViewById(R.id.register_screen);
image = findViewById(R.id.image_logo);
logoText = findViewById(R.id.logo_name);
sloganText = findViewById(R.id.logo_name);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
login_btn = findViewById(R.id.btnLogin);
callRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
Pair[] pairs = new Pair[7];
pairs[0] = new Pair<View,String>(image,"logo_logo");
pairs[1] = new Pair<View,String>(logoText,"logo_text");
pairs[2] = new Pair<View,String>(sloganText,"logo_desc");
pairs[3] = new Pair<View,String>(username,"user_tran");
pairs[4] = new Pair<View,String>(password,"password_tran");
pairs[5] = new Pair<View,String>(login_btn,"button_tran");
pairs[6] = new Pair<View,String>(callRegister,"login_register_tran");
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
ActivityOptions options =
ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,pairs);
startActivity(intent, options.toBundle());
}
}
});
}
}
там, где у вас был идентификатор slogan
представления … для показа я изменил его на logo
, где когда-либо ваш текст лозунга — назовите его идентификатором, а затем ссылайтесь на него в файле java.
Вы также не указали другие свои кнопки, такие как кнопка входа. Я исправил несколько ошибок, а затем запустил проект, и когда я нажал на register, он работал отлично.
Убедитесь, что у вас все правильно названо и правильно указано. также сравните исправление с вашим, а затем попробуйте и посмотрите, работает ли оно. Помните, где у вас есть Login
Я использую MainActivity