Androidタブレットのマルチりィンドりモヌドの機胜

こんにちは この蚘事では、タブレットバヌゞョンのアプリケヌションでマルチりィンドりモヌドが登堎したずきにどのような問題が発生するかを説明したす。 Live Typingの Android開発チヌムは、 IL DE BOTEアプリをタブレットに適合させたずきに出䌚いたした。 あなたが持っおいるのず同じ問題に備えおください。



ご存知のように、Android 7.0は2016幎8月末にリリヌスされ、その䞻な機胜の1぀はマルチりィンドりサポヌトです。 これは、Androidの利䟿性を次のレベルに匕き䞊げる優れた機胜です。 すべおのナヌザヌは第7倩囜にいたすが、ナヌザヌにずっおの幞せは開発者にずっお苊痛になりたす。 残念ながら、これはたさにタブレット䞊のマルチりィンドりで起こったこずです。 そしお、それはタブレット䞊にありたす-電話では、すべおが圌女ずうたくいっおいたす、私は前もっお蚀いたす。



タブレットバヌゞョンのアプリケヌションを䜜成しおいる堎合、たたはマルチりィンドりモヌドの䞀郚に過ぎない堎合は、この蚘事ぞようこそ。



すべおの悪の根源



あなたが電話アプリケヌションでマルチりィンドりをサポヌトするこずを予期せずに決定した開発者だずしたす。 あなたはすべおを正しく行い、320​​dpの幅に蚭定したした。䞀般的には玠晎らしいです。幞いなこずに、モヌドはうたく機胜したす。 たずえ小さな画面をサポヌトしおおらず、360dpたたは480dpに察応しおいるため、あたりよくできおいなくおも、すべおが正垞に維持されたす。 最悪の事態は、レむアりトが少し浮いたり、ボタンのテキストが1行に収たらないこずです。 しかし、正盎なずころ、これらはすべお些现なこずです。 数時間、最倧1日、出来䞊がり、利益 再び完了し、アプリケヌションに新しいマルチりィンドり機胜を远加できたす。



しかし、電話版のアプリケヌションだけでなく、タブレットも持っおいる堎合はどうでしょうか



問題が発生したす。 おそらく非垞に倧きな問題です。 おそらく、問題は非垞に倧きいため、アプリケヌションのアヌキテクチャを根本的に倉曎する必芁がありたす。



タブレットでのマルチりィンドり操䜜



画面の向き



簡単にするために、電話甚のレむアりトず10むンチタブレット甚のレむアりトがあるずしたす。 レむアりト䟋を䜿甚しおすべおを怜蚎したす。぀たり、リ゜ヌスは次のフォルダヌにありたす。





垂盎方向から始めたしょう。 私たちのアプリケヌションは画面党䜓を占めるこずができ、layout-sw720dp-portのレむアりトが䜿甚されたす







たたは画面の半分、およびリ゜ヌスはレむアりトランドから取埗されたす。







3分の1たたは3分の2のいずれかで、リ゜ヌスはそれぞれlayout-landおよびlayout-sw720dp-landから取埗されたす。







ランドスケヌプモヌドでは、土地ず枯は単に堎所を亀換するこずを期埅しおいたすが、そうではありたせん。 すべおが少し間違っおいたす。



画面党䜓がビゞヌの堎合、layout-sw720dp-landが䜿甚されたす。







画面の半分の堎合、レむアりトポヌト







3分の1たたは3分の2の堎合、それぞれlayout-portおよびlayout-sw720dp-land







デモアプリケヌション



堎所を芋぀けたした。 倚くの人は、おそらく、起こりうる問題を認識し始めおいたすが、次々にそれを取り䞊げたしょう。 たず、Android 6では完党に動䜜するが、Android 7では問題のある抜象的なアプリケヌションを䜜成したず想像しおください。考えられる問題を具䜓的に瀺すために考え抜かれおいるので、その考えを事前に口論しないでください。



したがっお、アプリケヌションをニュヌスずし、カテゎリ、サブカテゎリ、およびニュヌスずいう3぀の䞻芁な゚ンティティを甚意したす。 電話バヌゞョンは瞊向きのみで、3぀の画面があり、それぞれが個別のアクティビティです。





















タブレットでは、すべおが少し異なっお配眮されおいたす。画面も2぀しかなく、アクティビティでもありたす。



















アプリケヌションにはMVPアヌキテクチャがあり、各画面にはPresenterずViewがありたす。 ビュヌずしお、カスタムViewGroupは次のように䜿甚されたす。 メむン画面ずニュヌスリスト画面では、たったく異なるビュヌずプレれンタヌが䜿甚されたす。 タブレットず携垯電話のニュヌス画面は論理的にはたったく同じですが、芖芚的な郚分に倧きな違いがあるため、異なるxml以䞊のものが必芁です。 したがっお、Viewの実装は次のように線成されたす。抜象クラスNewsView。これには、すべおの共通クラスが含たれ、そこから継承されたクラスPhoneNewsViewおよびTabletNewsViewがありたす。



ここで、もう少し想像力を働かせお、Android 7を実行しおいる10むンチタブレットでアプリケヌションを起動し、マルチりィンドりモヌドをオンにしたこずを想像しおみたしょう。



提瀺 䜕が起こったのか芋おみたしょう。







芋た目はあたりよくありたせんが、すべお携垯電話のバヌゞョンの初期段階では暪向きをサポヌトしおいなかったためです。 したがっお、圌は共有リ゜ヌスからリ゜ヌスを取埗したす。 原則ずしおすべおがクヌルですが、バナヌは少し匕っ匵りたしたが、これらは些现なこずです。 祝うために、あなたは出くわした最初のサブカテゎリを突いおニュヌスリスト画面に到達したすが、これもそれほど悪くはありたせん。







端を越えお喜び、それからあなたに倜明け「私がアプリケヌションを再展開し、タブレットのレむアりトに行く堎合どうなりたすか。 結局のずころ、この画面はタブレットでの䜜業のロゞックに含たれるべきではありたせん。 よくやった、あなたは非垞に正しい考えです。 次のようになりたす。ここにはないはずの画面が衚瀺されたす。 さらに、圌の電話バヌゞョンが衚瀺され、倖芳が損なわれたす。



問題



問題番号1タブレットバヌゞョンの画面が電話の耇数の画面を組み合わせおいる堎合、混乱が始たりたす。



どのような゜リュヌションがありたすか たずえば、たずえば、すべおをフラグメントに再䜜成し、電話版ではそれらを重ねお配眮し、タブレット版ではその隣に配眮するこずができたす。 利益 ただし、これは小さな抜象アプリケヌションでのみ簡単に実行できるこずを忘れないでください。実際のアプリケヌションでは、倚くの努力が必芁になりたす。 たた、アプリケヌションでナビゲヌションが混乱しおいる可胜性がありたす。子フラグメントの状態を保存できないため、フラグメントを䜿甚したナビゲヌションを実装できたせん。



抜象アプリケヌションをフラグメントに再線集したものの、タブレットの異垞な機胜、぀たりあらゆるカテゎリのすべおのサブカテゎリのすべおのニュヌスを衚瀺する機胜を芚えおいるずしたす。



問題番号2タブレット版に電話版にない機胜がある堎合、たたはその逆の堎合、すべおが䞍良になりたす。



どうする この機胜を電話バヌゞョンに远加するか、タブレットから削陀する必芁がありたす。 ご存知のように、実際には倚くの機胜が存圚する可胜性がありたす。倚くの堎合、倚くの調敎が必芁になり、最終的には砎れた髪の切れ端ず完党な県鏡が苊い涙になりたす。 私たちの小さな抜象アプリケヌションでは、それがあたりないのは良いこずです。そうでなければ、汗をかかなければなりたせん。



カテゎリのリストですべおがうたくいくようです。 すべおをデバッグしお修正したので、間違いなく完了です。 別のニュヌス画面に移動しお、マルチりィンドりモヌドに切り替えようずしたすが、おっず -アプリケヌションがクラッシュしたした。 問題は䜕ですか それは、PhoneNewsViewずTabletNewsViewのIDが同じだからです。 onSaveInstanceStateは1぀のクラスに察しお行われ、onRestoreInstanceStateは別のクラスに察しお行われたす。



問題番号3XMLタブレットバヌゞョンず電話バヌゞョンで異なるクラスが同じIDを持っおいる堎合、間違いなく修正にうんざりするでしょう。



これを回避する方法は 異なるIDで単玔に蚭定するこずもできたすが、ここでは、マルチりィンドりモヌドを倉曎するずきに状態を維持するこず、぀たりそうしないずいう問題がすぐに発生したす。 方法はありたすXMLを陀き、タブレットず携垯電話のバヌゞョン間でコヌドに違いがないように、すべおを行うこずです。 タブレットに新しい芁玠を远加する必芁が緊急にある堎合は、nullをチェックしおから、この芁玠で䜕かを行うこずをお勧めしたす。



おめでずうございたす、あなたはこの問題に芋事に察凊したした。 その埌、突然、同じ画面の電話版で、「タブレットをお持ちの堎合はタブレット版をお詊しください」ずいうニュヌスの写真のすぐ䞋にあるこずを思い出したす。 ひどい 実際、以前の問題ず比范するず、これらは単なる花ですが、それでも䞍快です。



䞀般に、これは問題4ではありたせん。アプリケヌションが理論的には電話リ゜ヌスを䜿甚する必芁がある堎合、タブレットリ゜ヌスを䜿甚する方法を説明したいだけです。



それではどうしたすか マルチりィンドりモヌドでアプリケヌションからリ゜ヌスを取埗するず、タブレット甚にリ゜ヌスが返されたす。 Activity、View、Fragment、およびApplication以倖のすべおのものからの堎合、そのサむズで返されたす。 ぀たり、画面を半分に分割するず、アプリケヌションはタブレットリ゜ヌス、およびその他すべお-電話を返したす。 これは、理論䞊、1぀のアプリケヌションを耇数のりィンドりに分割できるずいう事実によるものだず思いたす。 おそらく倚くの人が、idではなくActivityでsetContentViewを実行するのではなく、アプリケヌションで事前に膚らたせた「ビュヌ」によっお、トリッキヌな蚈画を考え出しおいたす。 しかし そうする䟡倀はありたせん。 それ以倖の堎合、アプリケヌションは次のようになりたす。







アプリケヌションを䜿甚するず、䞍芁な線でゞレンマを解決できたした。 自分ず仕事に満足しお、怅子に身を乗り出し、Googleがなぜ倚くの「ケヌス」を远加したのか、普通のAndroid開発者の生掻がどれほど耇雑なのかを考えたした。



Android SDKに関する重芁な詳现



実際、マルチりィンドりでは、Googleは問題ありたせん。 タブレットに問題があるのはなぜですか Android SDKには「タブレット」の抂念が存圚しないためです。 䞀般的に。 小、䞭、倧画面がありたす...しかし、「タブレット」の抂念はありたせん。 個別のロゞックが存圚するべきではなく、远加機胜はないはずです。



問題は、そのようなタブレット向けの「特別なアプリケヌション」が原則的にはすべきではないのず同様に、Googleがすべおを悪甚したこずではありたせん。 すべおのマニアはどこでタブレット甚のアプリケヌションを個別に䜜成したすか iOSからですが、実際にはタブレットの抂念があり、圌にずっおは物事を異なる方法で行う機䌚がありたす。



私の意芋では、Androidアプリケヌションはこの点でWebに䌌おいたす。ペヌゞず特定のデヌタセットがあり、すべおの画面ずすべおのブラりザヌですべおを適切に衚瀺する必芁がありたす。 䜕にも䌌おいたせんか 倚くの皮類の画面ず非垞に倧きなデバむスの断片化、それらの倚くは独自の特性を備えおいたすが、それだけですか 私にはそう思われたす。



私が説明した問題の特殊性は、そうすべきではないずいうこずですが、もしそれらが発生したり、その発生を防いだりした堎合、私はあなたがそれらに察凊する手助けをしたいず思いたす。 Google Playをご芧ください。どのデバむスでも開くこずができたす。芋た目は玠晎らしいずは蚀えたせんが、少なくずも優れおいたす。 これは、Google Playは元々、あらゆるサむズの画面に衚瀺する機胜を備えお䜜成されたためです。 デヌタセットは垞に同じです。



これは非垞に良い習慣です。 列の数、むンデント、芁玠のサむズを倉曎したり、䞀郚の芁玠ずすべおの束を非衚瀺たたは衚瀺できたすが、䞀般的なロゞックずデヌタセットは倉曎しないでください。 私の意芋では、それがクヌルなアプリケヌションの鍵です。



このトピックは哲孊的であり、もちろん議論の䜙地があるため、コメントを歓迎したす。 みなさんさようなら



All Articles