首页 > 解决方案 > 在活动之间切换屏幕/视图

问题描述

在这里完成新手......当我从第一个活动中调用第二个活动时,屏幕视图会发生跳跃/变化。当我点击后退按钮返回第一个活动时,也会发生同样的情况。这些文件是由 Android Studio 生成的,我只添加了一个带有 onClick 的按钮来调用第二个活动,并修改了操作栏文本。希望屏幕录像说明。有什么想法可能导致它吗?

屏幕录制转换为动画 gif

在此处输入图像描述

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/enter_button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="120dp"
        android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp"
        android:text="Button"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".Main2Activity">

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.philburfitt.test;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // change text on actionbar
        getSupportActionBar().setTitle("Test - First Activity");

        // call Main2Activity on button press
        Button enterButton = findViewById(R.id.enter_button);
        enterButton.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                startActivity(new Intent(MainActivity.this, Main2Activity.class));
            }
        } );
    }
}

Main2Activity.java

package com.philburfitt.test;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        getSupportActionBar().setTitle("Test - Second Activity");
    }
}

标签: androidandroid-studioandroid-activitystart-activity

解决方案


您看到的是默认过渡,但是您可以使用自定义过渡。我将分享一个样本。

这就是我从活动 A 中调用下一个活动 B 的方式。

Intent i = new Intent(getApplicationContext(), Dashboard.class);
       startActivity(i);
       finish();
       overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

现在在 res>anim 中添加这个动画文件

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromXDelta="100%p"
    android:toXDelta="0" />
</set>

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromXDelta="0"
    android:toXDelta="-100%p" />
</set>

推荐阅读