Android меняет макет динамически - PullRequest
12 голосов
/ 31 декабря 2010

У меня есть ситуация, когда я хочу изменить макет активности через 3 секунды.Как я могу это сделать?Например, приложение запускается с заставки, которая будет работать в течение 3 секунд, а затем автоматически переключится на первый экран приложения.Это должно происходить в той же деятельности, какие-либо идеи?

Спасибо

Ответы [ 4 ]

14 голосов
/ 31 декабря 2010

Я сделал это, используя только один макет 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>

Тогда внутри моей деятельности у меня есть это:

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

Вы можете выполнить этот запуск через 3 секунды, поместив startAnimation () и setVisibility внутри runnable и используя postDelayed (), как отмечалось выше. Не забудьте выполнить некоторую работу, пока этот вводный макет находится на экране, поэтому для пользователя это не просто 3-секундная задержка. Возможно, проверьте, является ли запущенная версия приложения текущей версией или нет.

EDIT: Вам необходимо добавить файл 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"/>
3 голосов
/ 31 декабря 2010

Просто используйте ViewSwitcher, с помощью которого можно переключаться между любым количеством макетов в приложении без необходимости какого-либо setContentView.

2 голосов
/ 31 декабря 2010

возможно, вы могли бы использовать postDelayed () - вызов для выполнения runnable, который загрузит новый XML-файл, вызвав setContentView (R.xml.anotherxml).

1 голос
/ 25 августа 2011

Это оставляет меня, чтобы добавить к сообщению adnorid, что сам ViewSwitcher может переключаться только между 2 макетами / представлениями. Это просто потому, что он жестко запрограммирован только на 2 макета / просмотра без более глубокого значения, насколько я знаю. Поэтому я создал свой собственный MultipleViewSwitcher, также известный как MVS, на основе оригинального ViewSwitcher.java из источника Android. Единственные изменения, которые должны были быть сделаны:

  1. Обеспечить МВС собственным
    • логическое время mFirstTime и
    • int mWhichChild
  2. Правильно жестко закодирован в динамическую обработку произвольного числа представлений в функциях
    • addView (...)
    • getNextView ()
    • сброс ()

Все это может быть сделано только в MultipleViewSwitcher.java и работает как шарм.

Я натолкнулся на кучу подобных вещей, где источники для Android можно было сделать гораздо более мощными, много раз с почти легким редактированием. Я хотел бы знать, почему это так, но это не для этой темы здесь.

ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...