web-dev-qa-db-ja.com

Androidレイアウトと画像の自動サイズ変更

私のAndroidアプリには現在、スプラッシュスクリーン用に縦と横の2つのレイアウトがあります。どちらも同じシンプルなフォーマットを使用します-シンプルな線形レイアウトで保持される、画面と同じサイズの画像:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:orientation="vertical"
   Android:layout_width="fill_parent"
   Android:layout_height="fill_parent"
   >
<ImageView
       Android:layout_width="fill_parent"
       Android:layout_height="fill_parent"
       Android:scaleType="fitCenter"
        Android:src="@drawable/splash_p"
       />
</LinearLayout>

使用される画像は320w x 480hであり、Androidは、デバイスの画面サイズに関係なく、画面に合わせて自動的にサイズ変更されます。例。

ここで指摘するのは、最終的なアプリケーションのインストールサイズをできるだけ小さくすることであり、同じ画面の異なるレイアウトとサイズを、異なる画面サイズごとに含めることができることを認識しています。

スプラッシュ画面は、画面の上部3分の1にアプリの名前が表示され、画面の下部3分の2に画像が表示されます。メモリを節約するために、アプリ名と画像を2つの別々の画像にトリミングし、縦長モードで保持されているデバイスの縦に縦に並べて表示します。次に、画像の線形水平レイアウトを使用してから、横長モードのアプリ名を使用します。

縦向きのレイアウトの場合、私はこれを持っています:

     <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent" Android:layout_height="fill_parent" Android:orientation="vertical">
        <LinearLayout Android:id="@+id/linearLayout1" Android:layout_width="fill_parent"            Android:layout_height="wrap_content" Android:orientation="vertical">
        <View Android:layout_height="45dp" Android:layout_width="45dp" />   
        <ImageView Android:layout_height="fill_parent" 
        Android:src="@drawable/splashtext" 
        Android:scaleType="fitCenter" 
        Android:layout_gravity="center" 
        Android:layout_width="fill_parent"></ImageView>

        <View
        Android:layout_height="35dp"
        Android:layout_width="35dp" />      

       <ImageView
       Android:scaleType="fitCenter"
        Android:src="@drawable/splashpic"
       Android:layout_height="fill_parent" Android:scaleType="fitCenter" Android:layout_width="fill_parent" Android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>

上記をEclipseで表示すると、スマートフォンでは問題ありませんが、Android:scaleType = "fitCenter"引数を使用しているにもかかわらず、タブレットで表示すると画像が拡大されません。 imageviewのlayout_widthとlayout_heightでfill_parentの代わりにdipを使用しようとしましたが、それも機能しません。

何が悪いのですか?これを行う別の方法はありますか?

ありがとう

以下の@ KaHa6uのヘルプに基づいて、この改訂されたXMLを含めるように質問を編集しました。だから今私は持っています:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:layout_width="fill_parent"
   Android:layout_height="fill_parent" 
   Android:orientation="vertical">
    <LinearLayout Android:id="@+id/linearLayout1" 
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent" 
    Android:orientation="vertical">
<View
        Android:layout_height="15dp"
        Android:layout_width="15dp"
 /> 
<ImageView Android:layout_height="wrap_content" 
        Android:src="@drawable/splashtext" 
        Android:adjustViewBounds="true"
        Android:scaleType="fitXY" 
        Android:layout_gravity="center" 
        Android:layout_width="wrap_content" 
        Android:layout_weight="1">
        </ImageView>


<View
        Android:layout_height="15dp"
        Android:layout_width="15dp"
 /> 
<ImageView
       Android:scaleType="fitXY"
       Android:src="@drawable/splashpic" 
       Android:adjustViewBounds="false"
       Android:layout_height="wrap_content" 
       Android:layout_width="wrap_content" 
       Android:layout_weight="4" 
       Android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>

これは垂直方向に拡大しますが、水平方向には拡大しません。そのため、画面サイズが大きくなると、細い画像が大きくなってしまいます。

13
basinbasin

@basinbasin

説明したのとよく似た状況が発生しました。レイアウトの上にImageViewを配置する必要がありました。これは水平方向にのみ引き伸ばし、電話が横向きになっても高さを維持する必要がありました。私はこれだけで成功しました:

<ImageView
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:src="@drawable/main_header"
    Android:scaleType="fitXY"
/>

そしてもちろん、アクティビティの属性:

<activity Android:configChanges="keyboardHidden|orientation">

お役に立てれば。ありがとうございました。

15
KaHa6uc

FitCenter scaleTypeは、元のアスペクト比を維持します。 fitXY scaleTypeを試しましたか? Matrix.ScaleToFitドキュメント

1
KaHa6uc

ストレッチしたいImageViewのAndroid:layout_heightおよびAndroid:layout_width値として「fill_parent」を試しましたか? 「wrap_content」設定では、画像のサイズを変更する境界をシステムに通知しないと思います。試してみて結果を教えてください。

0
KaHa6uc