アクティビティの全画面背景画像


145

全画面画像を背景として使用する多くのアプリケーションを目にします。これは例です:

全画面の背景画像

私は、私はこれを行うには、これまでに見つけた最良の方法は、大きなサイズの画像を使用することで、プロジェクトにこれを使用して、それを入れたいImageViewと使用android: adjustViewBounds="true"余白を調整します

問題は、解像度が非常に高い画面の場合、画像が不足することです。

私が考えた別のオプションは、画像を使用することですFrameLayoutと、match_parentwidthし、heightこれはイメージを伸ばし...背景として、私は結果が非常に良好ではないと思います。

どうしますか


3
これは背景で機能するとは思わないが、画像で機能するはずである。android:scaleType="centerCrop"
EGHDK 2013

回答:


223

それを行うにはいくつかの方法があります。

オプション1:

さまざまなdpiに対してさまざまな完璧な画像を作成し、それらを関連する描画可能なフォルダーに配置します。次に設定します

android:background="@drawable/your_image"

オプション2:

1つの大きな画像を追加します。FrameLayoutを使用します。最初の子としてを追加しImageViewます。ImageViewで以下を設定します。

android:src="@drawable/your_image"
android:scaleType = "centerCrop"

2
「your_image」はどこに保存しますか?
Atharva Johri 2014年

5
res-> drawableフォルダー内。複数ある場合があります-それぞれが異なる解像度を表します(低解像度/高解像度など)。各解像度に特定の画像がない場合は、どれでも機能します。
krodmannix 2014年

5
答えはいいです。しかし、誰かが各dpiグループの典型的な電話サイズを見つけたかどうかは疑問です。これは、画像を準備するときに非常に役立ちます。編集済み:見つかった- stackoverflow.com/questions/10574363/...
キツネ

7
最後のオプション->メモリ不足:D
ternes3

1
ここでOOMエラーが発生します...大きな画像の場合、画面サイズに応じて拡大または縮小する必要があります!この場合、おそらく非同期タスクを介してビットマップをロードする必要があります。
Jonny2Plates 2014年

25

もう1つのオプションは、ドローアブル(backgroung.jpgという名前を付けます)に単一の画像(必ずしも大きいとは限りません)を追加し、「src」属性なしでxmlのルートにImageView iv_backgroundを作成することです。次に、対応するアクティビティのonCreateメソッドで:

    /* create a full screen window */
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.your_activity);

    /* adapt the image to the size of the display */
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
      getResources(),R.drawable.background),size.x,size.y,true);

    /* fill the background ImageView with the resized image */
    ImageView iv_background = (ImageView) findViewById(R.id.iv_background);
    iv_background.setImageBitmap(bmp);

トリミング、サイズの異なる画像は多くありません。それが役に立てば幸い!


3
これは便利なソリューションですが、メインスレッドのオフ処理をビットマップやることを忘れないでください:developer.android.com/training/displaying-bitmaps/...
カイルアイビー

19

様々なサイズの画像を以下のフォルダに入れてください

詳細については、このリンクにアクセスしてください

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

次の例としてImageViewを使用する代わりに、RelativeLayoutまたはLinearLayoutの背景を使用します

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:background="@drawable/your_image">

</RelativeLayout>

エラーが発生しますUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein '18 / 06/18

これにより、フラグメントが非常に遅延します。理由がわかりません。
セルミリオン

キャッシュを使用するか、picasso(square.github.io/picasso)でイメージをロードしてください問題が解決することを願っています
Munish Kapoor

7

どうですか

android:background="@drawable/your_image"

あなたの活動のメインレイアウトに?

このように、適切なres/drawable-**dpiフォルダに配置することで、画面密度ごとに異なる画像を作成することもできます。


7

これが投稿されてからしばらく経ちましたが、これは私を助けました。

ネストされたレイアウトを使用できます。RelativeLayoutから始めて、その中にImageViewを配置します。

高さと幅をmatch_parentに設定して、画面全体に表示します。

画像が画面に収まり、拡大しないように、scaleType = "centreCrop"を設定します。

次に、以下のLinearLayoutのように、通常どおりに他のレイアウトを配置できます。

android:alphaを使用して、画像の透明度を設定できます。

<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/image"
    android:alpha="0.6"/>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello"/>

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="There"/>

   </LinearLayout>
</RelativeLayout>

7

画像で透明なアクションバーの後ろに表示する場合は、テーマのスタイル定義に次のように記述します。

<item name="android:windowActionBarOverlay">true</item>

楽しい!


7

これを使って

android:background="@drawable/your_image"

あなたの活動の最初の線形または相対レイアウト。


1

NoToastの答えに沿って、res / drawable-ldpi、mdpi、hdpi、x-hdpi(xtra大画面の場合)に「your_image」の複数のバージョンがあり、match_parent削除してandroidを保持する必要があります:adjustViewBounds = "本当」



0

背景画像としてbg.pngを使用している場合は、次のようにします。

<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"
    android:background="@drawable/bg"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"/>
</RelativeLayout>

-1

ワーキング。これを試してみてください:

android:src="@drawable/img"

-1

three step for put background

1)好きな写真を選んでください。例:ここに画像の説明を入力

2)次に、この画像をドローアブルにコピーします。警告:名前の画像には短いタイプを選択する必要があります。

ここに画像の説明を入力してください

3)あなたは意図されたxmlページに行き、書きます:

android:background = "id picture"たとえば、私の画像IDは@ drawable / downloadです。

ここに画像の説明を入力してください

仕上げます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.