Aller au contenu

Gérer les orientations seulement pour certains types de devicess ?


Alocaly

Recommended Posts

Bonjour,

Pour l'instant, mon jeu était fait seulement en mode portrait, ce que je trouvais bien plus pratique pour des téléphones.

Par contre, pour des tablettes, je pense que c'est beaucoup moins bien, et il faudrait que j'autorise le mode paysage dans ces cas là...

Mais comment fait-on ?

Normalement, la gestion de l'orientation se fait dans le manifest, qu'on ne peut pas paramétrer en fonction du type de device.

On doit faire :

android:screenOrientation="portrait"

android:configChanges="keyboardHidden|orientation"

La première ligne pour forcer l'orientation,

La seconde pour empêcher l'activité de se récréer quand on change l'orientation.

Il faut donc le faire par code

Forcer l'orientation, c'est facile :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Par contre, empêcher l'activité de se recréer... je sèche complètement...

Quelqu'un aurait une idée géniale pour moi ?

Merci bien,

Emmanuel / Alocaly

Lien vers le commentaire
Partager sur d’autres sites

tu peux définir l'orientation à l'aide du "code java", et garder onConfigChange dans le xml

J'ai bien essayé, mais j'y suis pas arrivé non plus :( :

Si je garde le onConfig dans le xml, l'activité n'est pas recrée lorsqu'on change d'orientation, donc ca marche pas sur tablette.

Si je le vire, l'activité est recrée à chaque fois qu'on change l'orientation, meme si l'affichage se fera à nouveau avec une orientation forcée => ca marche pas sur les téléphones.

En fait, comme solution je vois :

* Pouvoir setter le onConfig par code

* Pouvoir lancer le process de recréation d'activité à la main dans le onConfigurationChanged

* J'ai raté un autre truc ?

Pourtant, je me dis que je ne dois pas etre loin... Peut-etre que je pourrais regarder dans les sources d'Android elle meme ce qu'il fait dans le onConfigurationChanged, je trouverais peut-etre de l'inspiration...

Emmanuel / Alocaly

Lien vers le commentaire
Partager sur d’autres sites

je n'ai pas bien suivi...

Dans le cas où ton Activity est détruite lors d'une rotation, qu'est ce qui pose problème sur le téléphone?

Dans le cas où ton Activity n'est pas détruite, qu'est ce qui pose problème sur la tablette?

onConfigurationChanged() est appelé uniquement lorsque tu décides de gérer toi même un changement de configuration (android:configChanges)

Mais comme je ne sais pas ce que tu fais dans ton Activity... (du natif?) je peux difficilement t'aider :/

Lien vers le commentaire
Partager sur d’autres sites

Ce que je veux, c'est que :

* Sur téléphone, il ne se passe rien du tout quand je passe en paysage ( l'écran reste en portrait, et l'activity n'est pas détruite )

* Sur tablette, l'orientation change ( donc l'activity est détruite )

Le seul moyen que je connaisse pour empecher l'activité de se détruire lors du changement d'orientation, c'est de mettre le configChange dans le manifest.

Mais dans ce cas là, l'activity n'est pas détruite non plus pour la tablette, donc on ne peut pas changer d'orientation quand l'utilisateur passe en paysage.

Bon, sinon, j'ai passé une heure à essayer de tracker ce qui se passe dans les sources d'android, mais je ne vois pas plus là ou je peux agir :(

Emmanuel / Alocaly

Lien vers le commentaire
Partager sur d’autres sites

Euh... Oui, c'est vrai...

Mais moi je voulais la détruire ( mais seulement en tablette), justement pour ne pas avoir à gérer ca. Apres, ca repasse par le process du OnCreate, et tout se fait tout seul. D'autant plus que les ingés de google déconseille de le faire soit meme, car c'est un coup à faire facilement des fuites mémoire, si je ne m'abuse...

Sinon, je dis que c'est vrai, mais je ne sais meme pas comment je pourrais le faire proprement.

Pour remettre un nouveau layout, tu peux faire un setcontentView pour remettre un nouveau layout ?

Et comment tu fais le ménage ?

Bon sinon, j'ai réglé pour le moment mon problème autrement ( meme si je ne suis pas super satisfait de ma solution ).

Dans le onConfigurationchange, je fais un finish, et le relance l'activity.

Ca semble marcher, coté mémoire, c'est pas top, car j'ai les deux activity vivantes en meme temps, mais pour le moment ca me suffira ( et puis sur une tablette, on n'a pas de soucis de mémoire, non ? )

En tout cas, merci de tes propositions, et si tu as plus d'infos ou des liens sur comment reconstruire une activity 'à chaud', ca m'interesse...

Emmanuel / Alocaly

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...