Как добавить заставку в приложение Android TV?

Кто-нибудь знает, как добавить заставку в приложение Android TV? что усложняет для меня, так это то, что основное действие должно иметь Theme.Leanback, чтобы быть принятым в google play, и чтобы иметь заставку, вам нужен свой собственный стиль/тема. Итак, как это сделать?


person Ahmad ElMadi    schedule 02.09.2016    source источник
comment
Вы можете расширить тему? что-то вроде <style name="AppTheme" parent="@style/Theme.Leanback"> <item name="android:windowBackground">@color/splash_background</item> </style>   -  person Mr. Kevin Thomas    schedule 03.09.2016
comment
У меня похожая проблема... Как вы это решили?   -  person full Error    schedule 22.08.2019


Ответы (2)


Вы можете настроить OnboardingFragment, чтобы отобразить его в виде заставки. OnboardingFragment позволяет добавлять этапы адаптации, но если они вам не нужны, вы можете просто установить setLogoResourceId внутри onCreateView.

Обратите внимание, что он вылетает, если вы держите количество страниц равным нулю, поэтому оставьте количество страниц равным единице и продолжительность заставки больше LOGO_SPLASH_PAUSE_DURATION_MS = 1333, в противном случае будет отображаться страница с кнопкой «Начать».

Идея состоит в том, чтобы изначально использовать фрагмент адаптации только с заставкой и добавлять шаги адаптации по мере роста вашего приложения.

OnboardingFragment

public class OnboardingFragment extends android.support.v17.leanback.app.OnboardingFragment {
    private static final long SPLASH_DURATION_MS = 2000;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);
        if (view != null) {
            view.setBackgroundColor(Color.RED);
        }
        setLogoResourceId(R.drawable.logo);
        Handler handler = new Handler();
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                onFinishFragment();
            }
        };
        handler.postDelayed(runnable, SPLASH_DURATION_MS);
        return view;
    }

    @Override
    protected void onFinishFragment() {
        super.onFinishFragment();
        // Our onboarding is done
        // Let's go back to the MainActivity
        getActivity().finish();
    }

    @Override
    protected int getPageCount() {
        return 1;
    }

    @Override
    protected String getPageTitle(int pageIndex) {
        return null;
    }

    @Override
    protected String getPageDescription(int pageIndex) {
        return null;
    }

    @Nullable
    @Override
    protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container) {
        return null;
    }

    @Nullable
    @Override
    protected View onCreateContentView(LayoutInflater inflater, ViewGroup container) {
        return null;
    }
}

OnboardingActivity

/*
 * OnboardingActivity for OnboardingFragment
 */
public class OnboardingActivity extends Activity {

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.onboarding);
    }
}

onboarding.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/onboarding_fragment"
    android:name="com.example.android.tvleanback.ui.OnboardingFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Объявите OnboardingActivity внутри AndroidManifest

<activity android:name=".ui.OnboardingActivity"
            android:enabled="true"
            android:exported="true"
            android:theme="@style/Theme.Leanback.Onboarding" />

Начать OnboardingActivity с MainActivity's onCreate

person random    schedule 13.09.2016
comment
не будет ли просто расширение темы? ‹style name=AppTheme parent=@style/Theme.Leanback› ‹item name=android:windowBackground›@color/splash_background‹/it‌​em› ‹/style› - person Ahmad ElMadi; 14.09.2016
comment
Но большинство людей используют заставку для загрузки дополнительных вещей в фоновом режиме (например, медленных библиотек и т. д.)... Я думаю, что ваша заставка должна быть частью вашей основной активности, сделанной путем добавления фонового изображения в вашу тему, как вы. с мобильными приложениями? - person kenyee; 05.11.2016

Посетите следующий сайт и скопируйте код оттуда и внесите изменения в соответствии с именем вашей активности, именем img. Также внесите изменения в свой манифест, чтобы запустить приложение с экраном спаша.

http://www.coderefer.com/android-splash-screen-example-tutorial/

person Prathviraj Patil    schedule 02.09.2016
comment
Привет, спасибо за ваш ответ, но это только для мобильных устройств, а я прошу для телевизора. - person Ahmad ElMadi; 03.09.2016
comment
Есть ли у вас какие-либо проблемы с применением этой техники? Вроде должно работать - person ULazdins; 03.09.2016