3

onActivityCreated() メソッドに 2 つのビューを追加する ListFragment があります - MapView ジェネリック ビュー (永続ヘッダー)。ListView を、ポートレート モードでは MapView とヘッダーの下に表示し、ランドスケープ モードでは MapView の右側とヘッダーの下に表示したいと思います。また、MapView の高さ (縦向き) と幅 (横向き) を、利用可能なウィンドウ サイズ (アクション バー、ステータス バー、およびナビゲーション バーを差し引いたもの - デバイスに存在する場合) のパーセンテージにしたいと思います。これを達成するには、ウィンドウ サイズを取得し、3 つのビューすべての適切な高さ、幅、およびレイアウト マージンを計算する必要があると思います。同様の質問で推奨されるいくつかのことを試しましたが、解決策は常にアクティビティのウィンドウサイズではなく、デバイスの高さ/幅を返します。

何か案は。前もって感謝します。

4

5 に答える 5

11
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
于 2012-09-14T17:21:39.093 に答える
9

スケーリングについては、次の手順を実行して達成できます。

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
LayoutParams params = new LayoutParams(metrics.widthPixels * desiredWidthPercentage, metrics.heightPixels * desiredHeightPercentage);

次に、必要なビューにパラメーターを適用します。

異なる向きについては、layout フォルダーと layout-land フォルダーで異なるレイアウトを使用するか、次のように動的にルールを追加することをお勧めします。

params.addRule(RelativeLayout.Above, ViewId);

ルールのすべてのキーワードを表示するには、http: //developer.android.com/reference/android/widget/RelativeLayout.htmlを参照してください。

于 2012-09-14T18:05:00.143 に答える
2

ViewTreeObserver を使用してこれを解決できました。

ViewTreeObserver vtObserver = view.getViewTreeObserver();
vtObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // check if the view's height and/or width > 0
        // don't forget to remove the listener when done using removeOnGlobalLayoutListener
    }
});
于 2012-11-25T19:47:37.460 に答える
0

ここでの答えは、画面のサイズを取得することではなく、異なるビュー間に画面スペースを割り当てるために weight プロパティを使用する縦向きと横向きの適切なレイアウトを使用することであるかどうかはわかりません。

他のフラグメント レイアウトをホストできるコンテナー レイアウトを作成できると思います。

レイアウト xml ファイル内でフラグメントを使用するいくつかの簡単な例を見ることができます。

http://android-er.blogspot.com/2011/12/simple-exercise-of-fragment-inflate.html

そしてここ

http://portabledroid.wordpress.com/2011/04/19/programmatic-and-layout-fragments/

また、さまざまな画面サイズにレイアウトを提供するためのヒントについては、次のリンクを参照してください: http://developer.android.com/guide/topics/resources/providing-resources.html

これがあなたを正しい方向に向けてくれることを願っています。

于 2012-09-14T17:17:44.270 に答える
-1

他の人が示唆しているように、私は向きごとに異なるレイアウトを使用し、それを別の方法で処理します:

if(getResources().getBoolean(R.bool.is_land)){
   //Set up mapview on the side
} else{
   //Add header to listfragment
}

res/values-land でブール値を使用する

于 2012-09-14T18:30:58.420 に答える