12

フルイメージの背景を持つAndroidタブレット用の Android アプリを実行していますが、 9-patch を使用できないため、背景をウィンドウ サイズにできるだけ近づける必要があります。

私がテストしたこと:

drawable-ldpi、、などのフォルダーを使用してテストしましたdrawable-mdpiが、画像をウィンドウに合わせたいので、うまく機能しません。

今、私はdrawable-wxxxdp、フォルダを使って、実際のウィンドウ サイズに近いサイズの画像を作成しようとしています。

だから私はこのフォルダ構造を持っています(各フォルダには異なる画像があります。つまり、同じサイズの画像はフォルダごとに異なります):

drawable-w800dp-mdpi // 800x600px image
drawable-w800dp-hdpi // 800x600px image
drawable-w1024dp-mdpi // 1024x600px image
drawable-w1024dp-hdpi // 1024x600px image
drawable-w1280dp-mdpi // 1280x800 image
drawable-w1280dp-hdpi // 1280x800 image
drawable-w1280dp-xhdpi // 1280x800 image

問題は、別のタブレットでアプリをテストするときに、期待されるフォルダーから常に画像を取得するとは限らないことです。

例: 1280x800px および 160 dpi のタブレットでは、( を使用してDisplayMetrics) 1280x752 のウィンドウ サイズを報告し、フォルダーから 1280x800px の画像を使用しdrawable-w1280dp-mdpi、上部と下部から画像の一部を切り取ります。しかし、 1280x736 のウィンドウ サイズ を報告する1280x800px および 213dpis のタブレットでは、画像は... drawable-w1024dp フォルダーの 1 つのような他のフォルダーから取得すると予想されますが、そのフォルダーからではありません。 .drawable-w800dp-hdpi

一方、 1024x552 のウィンドウ サイズを報告する1024x600px および 160dpisのような構成でエミュレーターを試すと、フォルダーから画像を取得しますが、縮小して画面の中央に配置するため、すべて非常に大きな境界線で終了します。画像の周りdrawable-w1024dp-hdpi

ファイル:

私が使用しているテストレイアウトは次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/appBackground"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="center"
        android:src="@drawable/background_image"
        tools:ignore="ContentDescription" />

</RelativeLayout>      

そして私のマニフェストファイルには次のものがあります:

<uses-sdk
    android:minSdkVersion="13"
    android:targetSdkVersion="15" />

<supports-screens 
android:anyDensity="true" 
android:largeScreens="true"
android:normalScreens="true" 
android:smallScreens="true"
android:resizeable="true"/>

更新: 私の活動コード:

public class ScreenTest extends Activity {

   private int width;
   private int height;
   private int dpis;
   private String sdpis;

   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Ask for a full screen window
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_screen_test);
  }

    /* (non-Javadoc)
    * @see android.app.Activity#onCreateView(java.lang.String, android.content.Context, android.util.AttributeSet)
    */
   @Override
   public View onCreateView(String name, Context context, AttributeSet attrs) {
      return super.onCreateView(name, context, attrs);
   }

   /* (non-Javadoc)
    * @see android.app.Activity#onStart()
    */
   @Override
   protected void onStart() {
      // TODO Auto-generated method stub
      super.onStart();
      // Get the info about the screen
      Display display = getWindowManager().getDefaultDisplay();
      width = display.getWidth();// size.x;
      height = display.getHeight();
      DisplayMetrics outMetrics = new DisplayMetrics();
      display.getMetrics(outMetrics);
      dpis = outMetrics.densityDpi;
      sdpis = "";

      switch (dpis) {
         case DisplayMetrics.DENSITY_DEFAULT:
               sdpis = "160";
               break;
         case DisplayMetrics.DENSITY_HIGH:
            sdpis = "240";
            break;
         case DisplayMetrics.DENSITY_LOW:
            sdpis = "120";
            break;
         case DisplayMetrics.DENSITY_XHIGH:
            sdpis = "320";
            break;
         default:
            sdpis +=dpis;
            break;
      }
      Log.d("DPIs", "dpis: " + dpis + " sdpis: " + sdpis + " width: " + width + " height: " + height);

   }

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_screen_test, menu);
        return true;
    }
}                 

概要:

だから、アプリがどのフォルダから画像を取得するかを予測する方法がわかりませんか? そしてそれはそれで何をしますか?(スケール、トリミング...)

余分な背景:

Android-resorucesタグに関するすべての質問を確認しました。公式ドキュメントを何度か読みました。

およびいくつかの関連する質問:

更新:フォルダー名のタイプミスを修正しました。

4

2 に答える 2

1

特定のデバイスをターゲットにする場合。または2つの解像度の中間にあるすべてのデバイスの場合、最初にデバイスの幅を見つける必要があります. このような

Display display ; 
int width =0;
display = getWindowManager().getDefaultDisplay(); 
width = display.getWidth();

その後、幅条件付きの if ステートメントを作成し、さまざまな画面サイズに対してさまざまなレイアウトを作成できます。これは推奨される方法ではありませんが、場合によってはうまく機能します

    if(width>=750)
      {
          setContentView(R.layout.screen_blue_heigh);
      }
   else if(width>=500&&width<750)
      {
          setContentView(R.layout.screen_blue_heigh);
      }
   else if(width<500&&width>=330)
      {
              setContentView(R.layout.screen_blue_medium);
      }
   else if(width<320)
       {
          setContentView(R.layout.screen_blue_low);
       }

これがあなたを助けることを願っています。

于 2014-01-20T13:19:45.040 に答える
1

w800dpポートレートモードで実行しているので、からリソースを選択するのは正しいです。

画面の向きが横向きと縦向きの間で切り替わると、システムが対応する幅の値が変更され、UI で使用できる現在の実際の幅が反映されます。

使用するres/drawable-sw600dp

画面の向きが変わっても、デバイスの最小幅は変わりません。

于 2012-11-07T15:18:45.430 に答える