сделать полноэкранный только в макете земли андроид при воспроизведении видеоПросмотреть

Я создаю приложение для Android, чтобы играть в liveStream, я добавил videoView в свой layout.xml и добавил папку layout-land

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

поэтому я добавил следующий код в onCreate ():

public void onConfigurationChanged(Configuration newConfig){
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
   {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
   } else 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}

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

 android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

но это приводит к тому, что код onCreate () выполняется только один раз.

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

Надеюсь, что кто-нибудь понял меня. Заранее спасибо.

 Erum16 сент. 2015 г., 14:05
как ты решил свою проблему? ниже уровня API19

Ответы на вопрос(2)

попробуй это...

@Override
    public void onConfigurationChanged(Configuration newConfig) 
    {
        super.onConfigurationChanged(newConfig);


        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
        {
            setContentView(R.layout.create_job_l);

        } 
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            setContentView(R.layout.create_job_p);

        }
    }
    @Override
    public void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        if (getResources().getConfiguration().orientation == 1)
        {
            setContentView(R.layout.create_job_p);
        }
        if (getResources().getConfiguration().orientation == 2)
        {
            setContentView(R.layout.create_job_l);
        }


    }
 user155338122 окт. 2012 г., 15:24
после того, как вы отредактировали код, это повлияет на поток видео? как я запретил приложению перезапустить активность при повороте
 user155338122 окт. 2012 г., 15:04
Это делает приложение постоянно LandScape, и это не моя цель, я хочу, чтобы LandScape и портрет, но сделать полный экран только в LandScape.
 Parag Ghetiya22 окт. 2012 г., 15:32
вы должны определить static videoView1 в другом классе, когда вы меняете ориентацию, тогда вы должны установить текущий объект videoView в static videoView1 ...... при перезапуске действия в то время, когда вы должны назначить static videoView1 для текущего videoView ..
Решение Вопроса

ний элемент в вашем файле макета. и используйте следующий код:

private RelativeLayout.LayoutParams paramsNotFullscreen; //if you're using RelativeLatout           

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);


    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) //To fullscreen
    {
        paramsNotFullscreen=(RelativeLayout.LayoutParams)mVideoView.getLayoutParams();
        RelativeLayout.LayoutParams params=new LayoutParams(paramsNotFullscreen);
        params.setMargins(0, 0, 0, 0);
        params.height=ViewGroup.LayoutParams.MATCH_PARENT;
        params.width=ViewGroup.LayoutParams.MATCH_PARENT;
        params.addRule(RelativeLayout.CENTER_IN_PARENT);
        mVideoView.setLayoutParams(params);

    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    {
        mVideoView.setLayoutParams(paramsNotFullscreen);
    }
}

Он получает копию макета videoview и сохраняет ее в глобальной переменной. затем создает новый объект layoutparams с предыдущими значениями, но теперь устанавливает ограничения для match_parent и устанавливает его в видеовиде. Вы videoview сейчас в полноэкранном режиме. Когда вы помещаете ваше устройство в портретный режим, paramsNotFullscreen восстанавливает предыдущие значения.

ОБНОВИТЬ:

В вашем файле манифеста вы должны добавить в объявление Activity следующий код, чтобы избежать перезапуска активности:

android:configChanges="screenLayout|screenSize|orientation"
 Omid Omidi26 янв. 2015 г., 22:17
Для вызова требуется уровень API 19
 ClarkXP09 дек. 2015 г., 15:19
добавил;) @gekod, на самом деле вы должны также добавитьscreenLayout вариант
 gekod09 дек. 2015 г., 11:03
Вы должны отметить, что необходимо добавить android: configChanges = "direction | screenSize" к активности в вашем манифесте, чтобы избежать разрушения и воссоздания активности при повороте.
 ClarkXP27 янв. 2015 г., 22:15
@OmidOmidi Я тестировал этот код в 2.3+. Во всяком случае, я опубликовал этот ответ в 2012 году, когда KitKat еще не был выпущен
 Erum16 сент. 2015 г., 13:56
@ClarkXP, используя этот код, мне не понадобится файл компоновки? как я буду делать это мой макет XM для видео здесь прилагаетсяpastie.org/10423424

Ваш ответ на вопрос