Блокировка ориентации экрана DreamService


Я возился с новым DreamService API за последние несколько часов, и это довольно мило. Но у меня есть один вопрос.

Я хотел бы зафиксировать ориентацию экрана в альбомной ориентации, когда отображается DreamService. Цель DreamService - показать несколько широкоэкранных фотографий, и я бы предпочел не иметь черных полос в верхней и нижней части экрана.

Я пробовал несколько вещей, в том числе setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) в коде Java и android:screenOrientation="landscape" в файле манифеста, но ни одна из них не была работал.

Это заставляет меня задуматься: возможно ли зафиксировать ориентацию DreamService?

3 2

3 ответа:

Команда разработчиков Android подтвердила, что в настоящее время это невозможно во время живого общения разработчиков некоторое время назад.

Я считаю, что Google хочет, чтобы DreamServices работал в обеих ориентациях экрана, поэтому это невозможно.

Обходной путь: Используйте этот lib https://github.com/rongi/rotate-layout

строить.gradle

 dependencies {
        compile 'rongi.rotate-layout:rotate-layout:2.0.0'
    }

your_daydream_layout.xml

<com.github.rongi.rotate_layout.layout.RotateLayout  
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   app:angle="-90">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <WebView
        android:id="@+id/daydream_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#2a2e31" />

    <TextView
        android:id="@+id/dream_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-light"
        android:text="..."
            android:textColor="#abc"
            android:textSize="20sp" />
    </RelativeLayout>
</com.github.rongi.rotate_layout.layout.RotateLayout>

И кстати: Позвольте автоматически вращать вашу мечту .. от https://code.google.com/p/android/issues/detail?id=40226

" похоже, что исправление для этого было реализовано (и никто не сказал США). К сожалению, это не работает должным образом. На моем Nexus 6p (6.0.1, Build #MHC19Q), если я проведу пальцем по самому левому экрану (Google Now?), ударить меню гамбургеров в левом верхнем углу, выберите пункт Настройки и перейдите в меню внизу есть опция "разрешить вращение" главного экрана. С если этот параметр включен, то начальный экран можно будет повернуть в альбомную ориентацию ориентация, когда это необходимо. Затем Daydream может унаследовать это вращение и отображение в ландшафтном режиме тоже."--18 мая 2016

Жаль, что я не нашел никакого решения, мне пришлось использовать неприятный обходной путь, который может или не может работать для вас, это установка настройки автоматического поворота, прямо перед настройкой вашего макета:

В классе DreamService:

import android.provider.Settings;
<...>

    @Override
public void onAttachedToWindow() {

    Settings.System.putInt(getContentResolver(),
            android.provider.Settings.System.ACCELEROMETER_ROTATION, 0);

    setContentView(R.layout.dream_main);
<...>

В вашем манифесте:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />