1

Androidアプリを作っていますがGalaxy Tabの仕様で画面サイズは1024x600ですが、このサイズでコンポーネントを追加しようとすると左下が切れてしまいます。

違いを確認するために次のコードを追加しました

  WindowManager mWMgr = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
  int width = mWMgr.getDefaultDisplay().getWidth();
  int height = mWMgr.getDefaultDisplay().getHeight();
  Toast.makeText(getApplicationContext(),
    "[system][w=" + width + ":h=" + height + "]", Toast.LENGTH_LONG).show();

  width = getWindowManager().getDefaultDisplay().getWidth();
  height = getWindowManager().getDefaultDisplay().getHeight();
  Toast.makeText(getApplicationContext(),
    "[this][w=" + width + ":h=" + height + "]", Toast.LENGTH_LONG).show();

実行すると、次のように表示されます: [system][w=600:h=1024] [this][w=400:h=683]

なぜそれが起こるのですか?

必要に応じて、コードを追加してコンポーネントを画面に表示します。

これは私のlayout.xmlです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView android:id="@+id/image01" android:layout_width="match_parent"
        android:layout_height="match_parent" android:scaleType="fitXY" />
</LinearLayout>

この場合、ImageView に描画した画像は画面サイズ (400x683) にスケーリングされます。

私は以下でテストしました:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="600px"
    android:layout_height="1024px">
    <ImageView android:id="@+id/image01" android:layout_width="match_parent"
        android:layout_height="match_parent" android:scaleType="fitXY" />
</LinearLayout>

すると、画像の左下が画面からはみ出してしまいます。

4

3 に答える 3

2

Display.getWidth/Height() を使用しないでください。これらは、ディスプレイの生のサイズを返します。これは、実際に持っているスペースの量ではありません。たとえば、ステータスバーは、そこから実際のスペースを、ある軸に沿って未定義の量だけ減らします。また、FLAG_FULLSCREEN を使用することでこの問題を回避できるとは思わないでください。なぜなら、デバイスが戻るボタンやホーム ボタンなどを含む「ステータス バー」を持つことは完全に合理的であり、したがって、削除できるものではないからです。

画面に合わせてサイズを変更する正しい方法は、ビュー システムを使用することです。ここで最も簡単なことは、onSizeChanged() を実装する View のサブクラスを作成し、これを setContentView() で固定することです。レイアウト パスが完了すると、 onSizeChanged() が呼び出され、ビューに使用できるスペースが割り当てられます。これは、向きの変更、表示の変更、IME の表示などにより、スペースが変更されるたびに呼び出されます。

于 2011-01-26T15:04:30.887 に答える
1

マニフェストでそれぞれの値を指定すると役立ちますか:

<supports-screens android:smallScreens=["true" | "false"] 
                  android:normalScreens=["true" | "false"] 
                  android:largeScreens=["true" | "false"] 
                  android:anyDensity=["true" | "false"] />

この の Android ドキュメントを参照してください。

于 2011-01-26T14:31:28.193 に答える
1

XML には何が含まれていますか? ビューの親コンテンツを埋めるか、コンテンツをラップしますか? 何をしているかによっては、最初のものが必要です...

編集: 上に Thorsten Dittmars の回答...

于 2011-01-26T14:33:11.750 に答える