правете fullScreen само в layout-land android, когато възпроизвеждате videoView

Създавам приложение за 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() да се изпълни само веднъж.

Как да накарам приложението ми да възпроизвежда видеопотока непрекъснато и когато завъртя устройството, за да направя цял екран в оформлението, тогава, когато се върна към портрет, да го направя нормално?

Надявам се, че някой ме е разбрал. Благодаря предварително.


person user1553381    schedule 22.10.2012    source източник
comment
как реши проблема си? под ниво api19   -  person Erum    schedule 16.09.2015


Отговори (2)


Трябва да добавите своя видеоизглед (или родител на съдържание) като последен елемент във вашия файл с оформление. и използвайте следния код:

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);
    }
}

Той получава копие на параметрите за оформление на видеоизглед и го записва в глобална променлива. след това създава нов обект layoutparams с предишните стойности, но задава сега границите на match_parent и го задава във вашия видеоизглед. Вашият видеоглед сега е на цял екран. Когато поставите устройството си в портретен режим, paramsNotFullscreen възстановява предишни стойности.

АКТУАЛИЗАЦИЯ:

Във вашия манифестен файл трябва да добавите в декларацията за дейност следния код, за да избегнете рестартирането на дейността:

android:configChanges="screenLayout|screenSize|orientation"
person ClarkXP    schedule 23.10.2012
comment
Обаждането изисква API ниво 19 - person Omid Omidi; 27.01.2015
comment
@OmidOmidi Тествах този код в 2.3+. Както и да е, публикувах този отговор през 2012 г., когато KitKat все още не беше пуснат - person ClarkXP; 28.01.2015
comment
@ClarkXP, използвайки този код, няма да имам нужда от layout-land файл? как ще направя това моето xm оформление за видео е прикачено тук pastie.org/10423424 - person Erum; 16.09.2015
comment
Трябва да споменете, че е необходимо да добавите android:configChanges=orientation|screenSize към активността във вашия манифест, за да избегнете унищожаването и повторното създаване на дейност при завъртане - person Helder AC; 09.12.2015
comment
добавено ;) @gekod, всъщност трябва да добавите и screenLayout опция - person ClarkXP; 09.12.2015

Опитайте тази...

@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);
        }


    }
person Parag Ghetiya    schedule 22.10.2012
comment
това прави приложението постоянно LandScape и това не е моята цел, искам както LandScape, така и портрет, но правя цял екран само в LandScape. - person user1553381; 22.10.2012
comment
след като сте редактирали кода, това ще се отрази ли на потока на видеото? тъй като попречих на приложението да рестартира дейността при завъртане - person user1553381; 22.10.2012
comment
трябва да дефинирате статичен videoView1 в друг клас, когато промените ориентацията на тогава трябва да зададете текущия videoView обект на статичен videoView1......когато рестартирате дейността по време, трябва да присвоите статичен videoView1 на текущия videoView.. - person Parag Ghetiya; 22.10.2012