【问题标题】:Android change layout dynamicallyAndroid动态改变布局
【发布时间】:2010-12-31 12:59:18
【问题描述】:

我有想在 3 秒后更改活动布局的情况。我可以这样做吗? 例如,应用程序以启动画面开始,它将运行 3 秒,然后自动将布局切换到应用程序的第一个屏幕布局。这应该发生在同一个活动中,有什么想法吗?

谢谢

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    我只使用了一种 xml 布局。我只是在其中放了一个额外的 RelativeLayout 来代表我的介绍屏幕,然后我在它上面使用了一个淡出动画,然后调用 .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>
    

    然后在我的活动中,我有这个:

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

    您可以通过将 startAnimation() 和 setVisibility 放入可运行对象中并使用 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 cannot be resolved or is not a field
    • @w0rldart 您需要将fadeout.xml 添加到/res/anim/ 文件夹,请参阅我的编辑。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      也许你可以使用 postDelayed()-call 来执行一个 runnable,通过调用 setContentView(R.xml.anotherxml) 来加​​载一个新的 xml 文件。

      【讨论】:

        【解决方案4】:

        这让我补充说,ViewSwitcher 本身只能在 2 个布局/视图之间切换。据我所知,这仅仅是因为它被硬编码为只有 2 个布局/视图而没有更深的含义。所以我建立了我自己的MultipleViewSwitcher aka MVS,基于来自android 源的原始ViewSwitcher.java。唯一需要做的改变是:

        1. 为 MVS 提供自己的
          • 布尔型 mFirstTime 和
          • int mWhichChild
        2. 更正硬编码为函数中任意数量视图的动态处理
          • addView(...)
          • getNextView()
          • 重置()

        这一切都可以单独在 MultipleViewSwitcher.java 中完成,效果非常棒。

        我遇到了一堆类似的东西,其中 android 源代码可以通过多次几乎不费吹灰之力的编辑而变得更强大。我想知道为什么会这样,但这里不适合这个帖子。

        干杯!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-05
          • 1970-01-01
          • 2013-01-27
          • 2012-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多