2013-08-02 7 views
1

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

styles.xml:

<style name="AppTheme.NoTitleBar" parent="AppTheme"> 
    <item name="android:windowNoTitle">true</item> 
</style> 

<style name="AppTheme.NoTitleBar.Fullscreen" parent="AppTheme.NoTitleBar"> 
    <item name="android:windowFullscreen">true</item> 
</style> 

Затем я создал макет с только VideoView:

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@android:color/black" 
    tools:context=".MainActivity" > 

    <VideoView 
     android:id="@+id/videoView_intro" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="0dp" 
     android:layout_marginTop="0dp" /> 

</RelativeLayout> 

Наконец, я играл видео по следующему коду:

MainActivity.java:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    VideoView v = (VideoView) findViewById(R.id.videoView_intro); 
    v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro)); 
    /* This line had a code snippet for event handling, unrelated to this question */ 
    v.start(); 
} 

мне удалось при воспроизведении видео, но VideoView имел небольшой запас на дне. Я предполагаю, что он соответствует высоте панели уведомлений. Как я могу избавиться от этой границы?

EDIT: Я не знаю, нужна ли эта информация, но деятельность принудительна как ландшафт. Кроме того, я предназначаться все устройства Android от уровня API 8, поэтому решение должно быть совместимо с уровнем API 8.

AndroidManifest.xml:

<activity 
     android:name="org.package.name.MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="landscape" 
     android:theme="@style/AppTheme.NoTitleBar.Fullscreen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+0

Я думаю, что самый быстрый способ - применить нижнее поле с отрицательным значением. Попробуйте это – Droidman

+0

@ Maver1ck Пробовал 'android: layout_marginBottom =" - 8dp "'. Результат был отрицательным. –

ответ

1

ОК, я думаю, что стал дураком, когда придумал этот ум.

Проблема была не в панели уведомлений. Вместо этого речь шла о соотношении сторон видео.

Видео было размером 480 × 272. Он имел соотношение сторон ок. 1,7647. С другой стороны, используемый размер экрана Galaxy Nexus был 1184 × 720, который имел соотношение сторон ок. 1,6444. Итак, в основном видео было «длиннее», чем экран.

я не обнаружил причину, потому что: 1) Любопытно высоты края практически сравнялась высоту панели уведомлений и 2) Так как видео запись системы, которая имела более узкий экран, чем телефон, я не верил, что это будет причиной. (Кодировщик сломал предполагаемый пропорции.)

В заключение, что я должен смотреть на это эта статья: Center VideoView in landscape mode

Урок, не попасть в вашу гипотезу слишком много.

5

Лучше может быть, чтобы создать свой собственный VideoView подкласс, переопределите метод onMeasure(int, int) и ухватите его размеры экрана и измените высоту/ширину видеообзора в соответствии с правильной высотой и шириной вашего устройства.

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

VideoView v = (VideoView) findViewById(R.id.videoView_intro); 
v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro)); 

DisplayMetrics metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    v.setLayoutParams(new LayoutParams(metrics.widthPixels, metrics.heightPixels)); 

v.start(); 
+0

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

+0

@ArleCamille О, вы, вероятно, уже импортировали LayoutParams из другого пакета. Я не уверен, что правильно принял разрешение, но ... – Tonithy

0
VideoView v = (VideoView) findViewById(R.id.videoView_intro); 
v.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.intro)); 

DisplayMetrics metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    v.setLayoutParams(new LayoutParams(metrics.widthPixels, metrics.heightPixels)); 

v.start();`enter code here` 

this code worked correctly 
+1

Привет, вы действительно должны объяснить, почему ваш ответ лучше, чем принятый. Особенно, когда вы отправляете такой старый ответ. –

+0

На самом деле я не знаю, где написать комментарий для этого старого ответа .. так что я добавил, что в качестве нового ответа – user8103021

+0

Вам нужно заработать больше репутации, чтобы комментировать. –

Смежные вопросы