Як адключыць змена арыентацыі ў паветры для Android

У мяне ёсць праблема з гульнёй я раблю для Android з паветрам. Дадатак арыентуе сам правільна (застаючыся ў альбомнай арыентацыі), пакуль я не заблакаваць тэлефон Я тэставанне з, а затым разблакаваць яго. Калі тэлефон разблакуецца, прыкладанне будзе знаходзіцца ў партрэтным рэжыме (ён павінен быць заўсёды ў альбомнай арыентацыі).

У файле дэскрыптара xml я ўсталяваць поўнаэкранны рэжым праўдзівага, суадносіны бакоў у ландшафт і аўто арыентавацца на хлусню, але гэта, здаецца, не ўплывае на дадатак, калі быць заблякаваны і разблакаваны (яна выдатна працуе ў любым іншым сцэнары). Ён стане партрэтам зноў і не вярнуцца ў пейзаж, калі адмыкнутая (так аўтаматычны зарыентаваць ілжывую вызначана не ўмешваліся).

Гэтае пытанне выклікае толькі тады, калі вы запускаеце гульню і заблакаваць тэлефон і разблакаваць. Калі, напрыклад, вы не націснуць на кнопку дадому, так што прыкладанне больш не знаходзіцца ў фокусе, а затым блакаваць і разблакаваць і атрымаць назад у прыпыніце гульню ён будзе па-ранейшаму знаходзіцца ў пейзажы.

EDIT: Я толькі што зрабіў важнае адкрыццё! Здаецца, гэта залежыць ад таго, які экран блакавання вы карыстаецеся на тэлефоне. Я выкарыстоўваю андроіда 4 галактыкі s3. Я уключыў яго не выкарыстоўваць блакаванне экрана і дадатак засталося ў пейзажы, калі я адкрыў! Гэта прагрэс. На жаль, мой сябар, які мае іншы Android 4.0 тэлефон паведаміў тое ж пытанне, так што гэта не толькі мой тэлефон.

0

8 адказы

У мяне такая ж праблема. Я праверыў на некалькіх розных прыладах. Большасць з іх на самой справе аварыі або атрымаць надзвычайную затрымку, калі блакіроўка экрана патрабуецца пароль. Маё рашэнне дазваляе аўтаматычную арыентацыю пасля таго, як прылада засынае, а затым адключае яго зноў, як толькі прылада ў ландшафтным. Я схаваць усё маё ўтрыманне, калі прылада знаходзіцца ў партрэтным. FYI я не правяраў ўвесь гэты код яшчэ, так што гэта можа быць нешта адсутнічае.

//Before the device goes to sleep, enable auto-orientation
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
function handleDeactivate(e:Event):void
{
    stage.autoOrients = true;

    //listen for the device to re-activate
    e.currentTarget.addEventListener(Event.ACTIVATE, handleActivate, false, 0, true);
}

//Once the device is re-activated, check the orientation.
function handleActivate(e:Event):void
{
    e.currentTarget.removeEventListener(Event.ACTIVATE, handleActivate, false, 0, true);

    //if the orientation is portait, just listen for an orientation change
    if (stage.stageHeight > stage.stageWidth)
    {
        //It makes sense that you would just use stage.setAspectRatio(StageAspectRatio.LANDSCAPE) here,
        //however in my experience I've found that setting the aspect ratio here seems to cause an infinite loop of the device attempting to reset the orientation.
        //Instead, I will wait for the user to change orientation, and then lock it in landscape
        stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
    }
    else
    {
        disableAutoOrientation();
    }
}

//Check if the new orientation is landscape. If so, disable orientation changes.
function onOrientationChange():void
{
    if (stage.stageWidth > stage.stageHeight)
    {
        stage.removeEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
        disableAutoOrientation();
    }
}

//disable the auto-orientation feature
function disableAutoOrientation():void
{
    stage.autoOrients = false;
}
2
дададзена

Змесціце гэта дадатак дэскрыптара XML

portrait
false
2
дададзена
толькі што замяніць партрэт з пейзажам ўнутры тэга AspectRatio.
дададзена аўтар Adrian Pirvulescu, крыніца
Вы можаце падзяліцца сваім дэскрыптарам прыкладання і код?
дададзена аўтар Adrian Pirvulescu, крыніца
Як я спрабаваў (і я думаю, не атрымалася), каб растлумачыць маё пытанне, што я ўжо паспрабаваў гэта, хоць ён павінен быць пейзаж, а не партрэт. Дзякуй за думкі, хоць.
дададзена аўтар Xaduurv, крыніца
Яшчэ раз, у мяне ёсць ландшафты ў тэгу AspectRatio. Партрэт ніколі не быў у тэгу AspectRatio.
дададзена аўтар Xaduurv, крыніца

Я бадацца галавы з той жа праблемай, вось мой infodump па гэтым пытанні.

Наколькі я разумею, прычына ў тым, што экран блакавання з'яўляецца накладанне на галоўным экране, так, каб паказаць экран блакавання, дысплей актывуецца разам з дадаткам (ён атрымлівае "актываваць» падзея і пачынае працаваць). Калі па змаўчанні прылады ў партрэтную арыентацыю на экране блакавання (тэлефоны ў асноўным робяць, таблеткі ў асноўным не робяць) прыкладанне валяюцца для паездкі, regardles сваіх пераваг і AIR праяўленых жаданняў.

У выніку, калі ваша прыкладанне нарэшце-то на першы план (карыстальнік разблакуе экран) гэта партрэт арыентаваных. Для ліквідацыі гэтай праблемы ўручную ўсталяваць патрэбную арыентацыю, калі вы атрымліваеце актываваць падзея. Там у дададзеным бзік на ICS - апавяшчэнне сістэмы бар з'яўляецца пасля разблакоўкі (не поўнаэкранным больш), і паўторна налада сцэны ў поўнаэкранны рэжым не мае ніякага эфекту. І гэта, наколькі мне ўдалося атрымаць. Быў бы ўдзячны за апавяшчэнне, калі вы знайшлі рашэнне.

Роднасная праблема складаецца ў тым, што, калі адлюстроўваецца экран блакавання, гульня пачынае працаваць ўнізе, што дрэнная сітуацыя, калі, напрыклад, гэта дзеянне гульні, і вы спыніліся ў сярэдзіне нешта, што патрабуецца неадкладны ўвод (напрыклад, дзе-небудзь у гульні :-)). Ці будзе <�ЕМ> любоў , каб знайсці рашэнне для гэтага.

0
дададзена
Дзякуючы Jpop! Вы, здаецца, сфармулявалі сваю задачу лепш, чым я мог. Гэта іншы хлопец, здаецца, не атрымаць яго. На жаль, я не атрымаў далей, чым вы пра гэта. Я паспрабаваў ўручную змяняць гэтыя рэчы постфактум без Fracking да прапорцыі, памер экрана, поўны экран, і г.д., але беспаспяхова. Я думаю, гэта праблема Google, у гэтым выпадку мы fracked. Я пачынаю сумнявацца ў сваім выбары платформы ... Unity хто?
дададзена аўтар Xaduurv, крыніца

У мяне быў тая ж праблема для узростаў Aswell адносна прымусовага паводзін партрэтнага пасля выхаду з заблакаванага экрана Я нешта накшталт гэтага, які, здаецца, працуе:

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange, false, 0, true);

private function onOrientationChange():void
{
    if (stage.stageWidth > stage.stageHeight)
    {
        stage.setAspectRatio(StageAspectRatio.PORTRAIT);
    }
    else
    {
        stage.setAspectRatio(StageAspectRatio.LANDSCAPE);
    }
}

хоць я не ўпэўнены, што адбудзецца, калі прылада паведаміў stageWidth як больш доўгага боку і stageHeight як больш кароткай боку г.зн. рабіць усё прылады паведамляюць арыентацыю, як можна было б чакаць яго

0
дададзена
на самай справе (!!) пры фіксаванай арыентацыі я выкарыстаў гэта, я быў збянтэжаны таксама, але цяпер гэта заўсёды ў партрэтнай stage.addEventListener (Event.ACTIVATE, OnActivate, хлусня, 0, TRUE); Прыватная функцыя OnActivate (е: Event): пустата {stage.setAspectRatio (StageAspectRatio.LANDSCAPE); }
дададзена аўтар bikutaa, крыніца

У мяне былі сапраўды такія ж праблемы .. да таго, што я вырашыў звярнуць з пуансонам і перабудаваны сваю гульню ў макеце вадкасці і ўсё становіцца перамешчана і змененым памерам. У цэлым, ён працаваў, але я хацеў бы застацца пейзаж. Я не думаю, што гэта рэч Google, я думаю, што гэта праблема ўспышкі CS6. Гэтая памылка не адбываецца, калі я публікую ў CS5.5, аднак я атрымаў CS6, таму што я мог бы інтэграваць AIR ў маю гульню. Я не ведаю, чаму, але гэта мае назіранні.

0
дададзена

Пасля таго, як гронка адводам вакол, я знайшоў простае рашэнне, якое працуе надзейна на сваіх прыладах. У асноўным толькі слухаць прыкладанне актывуецца, а затым скінуць арыентацыю на тое, што вы хочаце быць.

NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, onDeactivate);

private function onDeactivate(e:Event):void
{
    this.addEventListener(Event.ACTIVATE, onActivate);
}

private function onActivate(e:Event):void
{
    this.removeEventListener(Event.ACTIVATE, onActivate);

    if(stage.deviceOrientation == StageOrientation.ROTATED_RIGHT)
        stage.setOrientation(StageOrientation.ROTATED_LEFT);
    else
        stage.setOrientation(StageOrientation.ROTATED_RIGHT);
}
0
дададзена

Я мяркую, што гэта старая нітка, але я толькі што меў такую ​​ж праблему сам, і гэта тое, што, здавалася, вырашыць гэтую праблему для мяне. Дадатковы слухач крыху грубаваты, але ён працуе.

var default_orientation:String;
default_orientation=stage.orientation;

stage.addEventListener(Event.ENTER_FRAME,check_if_stage_is_rotated);

function check_if_stage_is_rotated(e:Event):void{
    if (stage){
        if(stage.orientation!=default_orientation){
            stage.setOrientation(default_orientation);
        }
    }

}
0
дададзена

Мой мабільны гульня АНДРОІД прыкладанне павінна быць у рэжыме <�моцны> ландшафтным , калі я максімізуе пасля мінімізацыі прыкладанне будзе адлюстроўвацца ў ландшафтным рэжыме і экран не паварочваецца, але праблема ў тым, вышыня і шырыня ўзаемазаменнымі. Так што адлюстроўвалася <�моцны> палова экрана застаецца толькі быў <�моцны> пусты экран . Калі блакаваць і разблакаваць прылада, аўтаматычна вышыня і шырыня будуць адпавядаць у залежнасці ад памеру экрана.

Я апрацаваў вышэй праблемы, выкарыстоўваючы <�моцны> Event.ACTIVATE </моцны>, калі дадатак з'яўляецца актыўным, то я скінуць шырыню, вышыню, Scalex і ScaleY. У 4.0, 4.1, 4.2 версіі Android ён працуе нармальна, але калі мы выкарыстоўвалі 4.4, 5,1 ён будзе паказвае тую ж праблему. Як мы можам гэта выправіць?

0
дададзена