2016-04-18 8 views
1

私はアンドロイドの開発には新しく、断片とレイアウト(Xamarin.Androidはそれが価値あるものです)に苦しんでいます。プログラマブルなアンドロイドフラグメントのレイアウト

メインビューのOnCreateメソッドでプログラムでフラグメントを追加しています。フラグメントの1つはナビゲーションのコントロールを保持し、フライオーバーイディオムを実装します。今私の問題は、ナビゲーションフラグメントの幅、例えば、親コントロールの幅の半分を作る方法が見つからないということです。私がレイアウトにアクセスすることができたすべてのオーバーライドでは、フラグメントとメインビューの幅が両方とも0になっています。レイアウトファイルで断片的にフラグメントのサイズを設定することもできませんでした。最初にフラグメントを隠すのと同じ方法でアクセスすることになるでしょう)。 Xamarin/VSは、サイズの設定やプロパティの文字列への変換(つまり、parent_widthなど)が無効であると訴えています。

私が読んだ断片に関するすべてのチュートリアルでは、この点が省略されています。

答えて

1

問題を正しく理解していれば、動的に追加されたフラグメントのレイアウトサイジングに問題があります。

フラグメントを追加する方法と使用しようとしたオーバーライドメソッドの概要を示すコードを貼り付けることができた場合に役立ちます。ただし、ここにコードを見ずに支援するための最良の試みです。

過去に一貫して使用していた動的に追加された要素をサイジングするには、2つの方法があります。 1つは、LinearLayoutのレイアウトに基本コンテナを使用し、フラグメントの重みを動的に指定することです。これにより、フラグメントがレイアウトの一部を簡単に消費するように指定することができます。たとえば、フラグメントAとBがあり、フラグメントAがレイアウトスペースの25%を消費したい場合、そのウェイトを1に設定し、フラグメントBのウェイトを4に設定できます。エレメントのウェイトを動的に設定するサポートを見つけることができますあなたのフラグメントなど):How to set layout_weight attribute dynamically from code?

もう1つのオプションは、コントロールが配置されたときに「起動」するOnGlobalLayoutListenerを使用することです。これにより、レイアウトを測定して既にレイアウトされている幅/高さを判断し、測定のために適切なスペースを消費しても、0に戻ることはありません。コードの書き方を概説した記事が多数ありますこのリスナーはウェブ全体に散在しています。また、リスナー機能のいくつかをサブクラス化して、コントロールがいつ配置されたかをよく知る必要がある場合には、簡単に再利用できるようにすると便利です。ここに、http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.htmlのAndroidドキュメントへのリンクがあります。

希望します。

+0

(I)OnGlobalLayoutListenerが私のトリックでした。どうもありがとうございました。 –

関連する問題