2012-01-14 7 views
0

私は色の選択をする状況があります。それがポートレートモードで行われている場合は、すべてが問題ありません。しかし、私がランドスケープモードで(ダイアログが画面に収まらない)、レイアウトを膨らませようとすると爆発するようです。Android:風景モードでは爆発しているが、ポートレートモードでは表示されない

ビューが画面に完全に収まらないような風景モードでこれを行う特別な方法はありますか?

画面の不動産以外の相違点を考慮する必要がありますか?

+0

あなたが画面の幅に合わせて、あなたのダイアログのビューを構築するように聞こえます。この場合、議論している振る舞いが生まれます。ここにダイアログのコードを配置して、分析して助けてください。 –

+0

さて、ここにコードの(明らかに)問題のセクションがあります。私がランドスケープモードで問題になる理由が誰に見えても、私はすべて耳にします。 '\t \t public ColorPickerDialog(最終コンテキストコンテキスト、intカラー、OnColorPickerTapListenerリスナー){ \t \t \t this.listener = listener; \t \t \t Color.colorToHSV(color、currentColorHsv); \t \t \t最終ビューview = LayoutInflater.from(context).inflate(R.layout.colordialog、null); \t \t \t viewHue = view.findViewById(R.id.viewHue); ' – CraigA

+0

こんにちは、ここでの編集に少し問題があります。 xmlの幅と高さは、 '\t android:layout_width = "wrap_content" \t android:layout_height = "wrap_content" のように相対レイアウトでwrap_contentに設定されています。苦情。他に何が起こっているのか誰かを助けてくれるか分からない。 ???? – CraigA

答えて

1

CraigA、

あなたのコメントを読んだ後、別の幅と高さがXMLで生成される方法についての誤解があるようです。これは最初はよくある誤解です。ここで理解できることは、さまざまなオブジェクトの幅が動的であるにもかかわらず、オブジェクトに異なる動作を課すということです。

layout_width/layout_height一般

幅と高さのパラメータは、オブジェクトの実際の幅と高さには影響を与えません。それらはディスプレイの幅と高さに影響します。つまり、幅と高さを内容よりも小さく設定することができ、内容がスクロールするときにコンテナより大きい場合でもアクセスできるようになります。

多くの子ビューは親ビューからのキューを取得するため、上記のような動作が発生する可能性があります。ここでのトリックは、まず何が起こっているのかを理解してから、システムの動作を補うことです。通常

match_parent/fill_parent

、これは現在のビューが親からそのサイズを取得することを意味します。ビューがトップレベルのビューの場合、ビヘイビアはわずかに変更されます。これがダイアログのトップレベルのビューである場合は、画面のサイズまたは内容のサイズ(どちらか小さい方)になります。ビューがアクティビティのトップレベルのビューである場合、結果は同じですが、の外観はと異なります。つまり、アクティビティの不透明度とバックグラウンドは完全になりますが、ビューのサイズは画面の内容またはサイズのいずれか小さい方になります。子のサイズは、このビューの幅/高さに基づいていない限り影響を受けません。この場合

wrap_content

、ディスプレイの高さは、直接の子のすべての表示の高さに基づいています。階層がwrap_content以外のものを使用するまで、この動作は「最年少」の子孫にカスケードします。

あなたの問題は、(それが今表示されている)

あなたのトップレベルのビューはwrap_contentを使用するため、表示サイズは子供の表示サイズの全てに基づいてされます。この場合、最上位レベルの表示にのみmatch_parent' or fill_parent`(あなたのAPIに依存します)を使用する方が良いかもしれません。これは少なくともダイアログがコンテンツではないにしても適切なサイズになるようにします。トップレベルのビューに基づいたサイズのコントロールの場合、それらのコントロールは一直線になります。そうでないものは手動で調整する必要があります。

ここで決定する必要があるのは実装です。すべてのディスプレイのサイズを調整する必要がありますか、またはランドスケープだけを調整する必要がありますか。変更がポートレート表示に影響を与えない場合は、1つのファイルが良好でなければなりません。そうでない場合は、ポートレート用のレイアウトファイル(現在のレイアウトファイル)、横長モード用のレイアウトファイルが必要になります。

2つのファイルを使用している場合は、現在のファイルを保存するためにlayout_portという名前のフォルダが作成されます。調整済みのフォルダにlayout_landという名前のフォルダを追加します。それらは同じ名前で、ちょうど別々のフォルダに格納されます。

これが役に立てば幸い、

FuzzicalLogic

+0

これは多くのFuzzicalLogicに役立ちます。私はこれを打つつもりです - そしてありがとう! – CraigA

関連する問題