安卓如何动态改变布局

12
我有一个情况,希望在3秒后更改Activity的布局。 我应该如何做呢? 例如,应用程序从启动画面开始运行,持续3秒钟,然后自动切换到应用程序的第一个屏幕布局。 这应该在同一个Activity中完成,有什么想法吗?
谢谢
4个回答

14

我只使用了一个xml布局文件来实现这个功能。我在其中添加了一个额外的RelativeLayout代表我的介绍界面,然后给它使用了一个fadeOut动画,最后调用.setVisibility(View.GONE)方法将其隐藏。

这是我的main.xml布局文件的一部分。

<RelativeLayout
        android:id="@+id/introLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
      android:background="#FFFFFF"
    >

        <ImageView
        android:id="@+id/logoImg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/logo">
        </ImageView>
    </RelativeLayout>

然后在我的 Activity 中,我有这个:

introLayout = (RelativeLayout) findViewById(R.id.introLayout);
Animation fadeOutAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fadeout);
introLayout.startAnimation(fadeOutAnim);
introLayout.setVisibility(View.GONE);

如markus所述,您可以将startAnimation()和setVisibility放入一个runnable中,并使用postDelayed()在3秒后运行。不过,请考虑在此介绍布局仍然在屏幕上时执行一些工作,以使用户不仅面临3秒的延迟。也许可以检查正在运行的应用程序版本是否为当前版本。

编辑: 您需要将fadout.xml文件添加到/res/anim/(如果不存在,则创建anim目录)。这里是一个示例。

fadeout.xml

<?xml version="1.0" encoding="utf-8"?>

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="700" 
       android:fillAfter="true"/>

“R.anim.” 中的 “.anim.” 是什么意思?我收到了一个“无法解析 anim 或它不是一个字段”的错误提示。 - Alex
1
@w0rldart,你需要将fadeout.xml添加到/res/anim/文件夹中,请参考我的编辑。 - FoamyGuy

3

只需使用ViewSwitcher,就可以在应用程序中在任意数量的布局之间切换,而无需执行任何setContentView操作。


2
也许你可以使用postDelayed()方法调用一个Runnable对象,通过调用setContentView(R.xml.anotherxml)来加载一个新的XML文件。

1

这让我能够补充adnorid的帖子,ViewSwitcher本身只能在两个布局/视图之间切换。这仅仅是因为硬编码了只有2个布局/视图,没有更深层次的意义,据我所知。因此,我基于Android源代码中的原始ViewSwitcher.java构建了自己的MultipleViewSwitcher,也称为MVS。唯一需要进行的更改是:

  1. 为MVS提供自己的
    • boolean mFirstTime和
    • int mWhichChild
  2. 将硬编码更正为动态处理任意数量的视图功能,
    • addView(...)
    • getNextView()
    • reset()

这些都可以在MultipleViewSwitcher.java中完成,并且像魅力一样工作。

我遇到了很多类似的问题,使用近乎无脑的编辑可以使Android源代码变得更加强大。我想知道为什么会这样,但这不是这个帖子的主题。

干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接