Imagem de plano de fundo de tela inteira em uma atividade

145

Vejo muitos aplicativos que usam uma imagem em tela cheia como plano de fundo. Isto é um exemplo:

Imagem de fundo de tela cheia

Quero usar isso em um projeto, a melhor maneira que encontrei até agora para fazer isso é usar uma imagem de tamanho grande, colocá-la em ImageViewe usar android: adjustViewBounds="true"para ajustar as margens

O problema é que, se uma tela com uma resolução muito alta, a imagem fica aquém.

Outra opção em que pensei é usar a imagem em a FrameLayout, com match_parentin widthe heightcomo background ... isso amplia a imagem, mas acho que o resultado não é muito bom.

Como você faria?

Sergio76
fonte
3
Não acredite que isso funcione em fundos, mas deve funcionar em imagens. android:scaleType="centerCrop"
precisa saber é o seguinte

Respostas:

223

Existem várias maneiras de fazer isso.

Opção 1:

Crie imagens perfeitas diferentes para diferentes dpi e coloque-as na pasta drawable relacionada. Depois defina

android:background="@drawable/your_image"

Opção 2:

Adicione uma única imagem grande. Use FrameLayout. Como primeiro filho, adicione um ImageView. Defina o seguinte no seu ImageView.

android:src="@drawable/your_image"
android:scaleType = "centerCrop"
stinepike
fonte
2
onde você armazena 'sua_imagem'?
Atharva Johri
5
Nas pastas res-> drawable. Pode haver vários - cada um representa uma resolução diferente (por exemplo, baixa resolução / alta resolução). Se você não tiver imagens específicas para cada resolução, qualquer uma funcionará.
Krodmannix
5
A resposta é boa. Mas gostaria de saber se alguém encontrou os tamanhos de telefone típicos para cada grupo de dpi, o que seria bastante útil ao preparar imagens. Editado: found - stackoverflow.com/questions/10574363/…
fox
7
última opção -> falta de memória: D
ternes3 15/07
1
Erro de OOM aqui vamos nós ... se for uma imagem grande, você precisará aumentar ou diminuir a escala, dependendo do tamanho da tela! Nesse caso, você provavelmente precisará carregar um bitmap por tarefa assíncrona.
Jonny2Plates
25

Outra opção é adicionar uma única imagem (não necessariamente grande) nos drawables (vamos chamá-la de backgroung.jpg), criar um ImageView iv_background na raiz do seu xml sem o atributo "src". Em seguida, no método onCreate da atividade correspondente:

    /* 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);

Sem recorte, sem muitas imagens de tamanhos diferentes. Espero que ajude!

axplusb
fonte
3
Esta é uma solução útil, mas lembre-se de fazer bitmap processamento off do segmento principal: developer.android.com/training/displaying-bitmaps/...
Kyle Ivey
19

Você deve colocar as várias imagens de tamanho na pasta a seguir

para mais detalhes visite este link

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

e use o plano de fundo RelativeLayout ou LinearLayout em vez de usar o ImageView como exemplo a seguir

<?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>
Munish Kapoor
fonte
Estou recebendo um erro queUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein
Isso deixa meu fragmento tão lento. Não consigo descobrir o porquê.
Sermilion 5/09/16
usar a imagem de carga cache ou com picasso ( square.github.io/picasso ) esperança vai resolver seu problema
Munish Kapoor
7

A respeito

android:background="@drawable/your_image"

no layout principal da sua atividade?

Dessa forma, você também pode ter imagens diferentes para diferentes densidades de tela, colocando-as nas res/drawable-**dpipastas apropriadas .

NoToast
fonte
7

Já faz um tempo desde que isso foi publicado, mas isso me ajudou.

Você pode usar layouts aninhados. Comece com um RelativeLayout e coloque seu ImageView nele.

Defina altura e largura como match_parent para preencher a tela.

Defina scaleType = "centreCrop" para que a imagem caiba na tela e não seja esticada.

Em seguida, você pode colocar outros layouts como faria normalmente, como o LinearLayout abaixo.

Você pode usar android: alpha para definir a transparência da imagem.

<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>
smurph
fonte
7

Se você deseja que sua imagem mostre por trás de uma barra de ação transparente, coloque o seguinte na definição de estilo do seu tema:

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

Aproveitar!

Jens
fonte
7

usa isto

android:background="@drawable/your_image"

na sua atividade, primeiro layout linear ou relativo.

Syed
fonte
1

De acordo com a resposta do NoToast, você precisaria ter várias versões de "sua_image" em seus res / drawable-ldpi, mdpi, hdpi, x-hdpi (para telas xtra grandes), remova match_parent e mantenha o android: AdjustViewBounds = " verdade"

sb_269
fonte
1

Adicione android:background="@drawable/your_image"dentro do seu Relativelayout / Linearlayout Worked.

Mwongera808
fonte
0

Se você tem o bg.png como sua imagem de fundo, simplesmente:

<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>
Muhammad Rehan Qadri
fonte
-1

Trabalhando. você deve tentar isso:

android:src="@drawable/img"

fonte
-1

three step for put background

1) você deve escolher sua imagem semelhante. por exemplo: insira a descrição da imagem aqui

2) Então você copia esta imagem no drawable. aviso: você deve escolher tipos abreviados para a imagem do nome.

insira a descrição da imagem aqui

3) você vai para a página xml Pretendido e escreve:

android: background = "id picture", por exemplo, meu id de imagem é @ drawable / download.

insira a descrição da imagem aqui

terminar.

mohammad vakili
fonte
-2

A maneira mais fácil:

Etapa 1: abrir o arquivo AndroidManifest.xml

Você pode ver o arquivo aqui!

Etapa 2: Localize android:theme="@style/AppTheme" >

Etapa 3: mude para android:theme="@style/Theme.AppCompat.NoActionBar" >

Etapa 4: Em seguida, adicione ImageView & Image

Etapa 4: É isso aí!

Jishnu N Krishnan
fonte