¿Cómo crear una aplicación de fondo de pantalla en Android Studio?

Casi todos los dispositivos Android tienen un fondo de pantalla establecido en su pantalla de inicio. Para configurar este fondo de pantalla en la pantalla, muchos dispositivos Android ofrecen una aplicación de fondo de pantalla donde podemos buscar diferentes tipos de fondos de pantalla según varias categorías. En este artículo, veremos cómo crear una aplicación similar en dispositivos Android en Android Studio. 

¿Qué vamos a construir en este artículo? 

Construiremos una aplicación de fondo de pantalla simple en la que agregaremos funcionalidad para filtrar fondos de pantalla según varias categorías. Junto con eso, también agregaremos una barra de búsqueda para buscar fondos de pantalla según la consulta de búsqueda del usuario. A continuación se muestra el video en el que veremos lo que vamos a construir en este artículo. Tenga en cuenta que vamos a implementar este proyecto utilizando el lenguaje Java

Implementación paso a paso

Paso 1: crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: antes de ir a la sección de codificación, primero debe hacer una tarea previa

Vaya a la sección aplicación > res > valores > colores.xml y configure los colores para su aplicación.

XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#0F9D58</color>
    <color name="purple_500">#0F9D58</color>
    <color name="purple_700">#0F9D58</color>
    <color name="teal_200">#0F9D58</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
  
    <color name="blac_shade_1">#292D36</color>
    <color name="black_shade_2">#272B33</color>
    <color name="black_shade_3">#22252D</color>
    <color name="dark_blue_shade">#021853</color>
    <color name="yellow">#ffa500</color>
  
</resources>

Paso 3: Agregar dependencia en el archivo build.gradle

Vaya a la sección Gradle Scripts > build.gradle (Módulo: aplicación) e importe las siguientes dependencias y haga clic en «sincronizar ahora» en la ventana emergente anterior.

implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.android.volley:volley:1.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
implementation 'com.github.Shashank02051997:FancyToast-Android:0.1.8'

Navegue a la aplicación > Gradle Scripts > build.gradle (Nivel de proyecto) y en este archivo, tenemos que ir a agregar mavenCentral en la sección allProjects. 

allprojects {
    repositories {
        google()
        mavenCentral()
        // add below line 
        maven { url "https://jitpack.io" }
        jcenter() 
    }
}

Luego de agregar esta dependencia simplemente tenemos que sincronizar nuestro proyecto para instalar los paquetes de todas las dependencias. 

Paso 4: agregar permisos de Internet en el archivo AndroidManifest.xml

Vaya a la aplicación > archivo AndroidManifest.xml y agregue la siguiente línea de código en él.  

XML

<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.INTERNET" />

Paso 5: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo  activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<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="@color/black_shade_1"
    tools:context=".MainActivity">
  
    <ImageView
        android:id="@+id/idIVIcon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true" />
  
    <TextView
        android:id="@+id/idTVHeading"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/idIVIcon"
        android:layout_marginTop="20dp"
        android:fontFamily="@font/adamina"
        android:gravity="center"
        android:text="@string/app_name"
        android:textAlignment="center"
        android:textColor="@color/white"
        android:textSize="20sp" />
  
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/idTVHeading"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp" />
      
</RelativeLayout>

Paso 6: crear una nueva clase modal de Java para almacenar los datos de las categorías

Navegue a la aplicación > java > el nombre del paquete de su aplicación > haga clic con el botón derecho en él > Nuevo > clase Java y asígnele el nombre CategoríaRVModal y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle.

Java

public class CategoryRVModal {
    // creating variable font category 
    // and image url on below line.
    private String category;
    private String imgUrl;
  
    public CategoryRVModal(String category, String imgUrl) {
        this.category = category;
        this.imgUrl = imgUrl;
    }
  
    // creating a constructor, getter and setter methods.
    public String getCategory() {
        return category;
    }
  
    public void setCategory(String category) {
        this.category = category;
    }
  
    public String getImgUrl() {
        return imgUrl;
    }
  
    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl;
    }
}

Paso 7: Creación de archivos dibujables 

Crearemos dos archivos dibujables, uno será para nuestro fondo de botón. Para crear este archivo, vaya a la aplicación > res > dibujable > Haga clic con el botón derecho en él > Nuevo y asígnele el nombre button_back y agregue el código a continuación. Se agregan comentarios en el código para conocer con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/black_shade_1" />
    <!--stroke for our button-->
    <stroke
        android:width="1dp"
        android:color="@color/white" />
    <corners android:radius="20dp" />
</shape>

Después de eso, crearemos un archivo dibujable para el fondo de nuestra barra de búsqueda. Del mismo modo, cree otro archivo dibujable y asígnele el nombre search_back y agréguele el siguiente código. 

XML

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="15dp" />
    <solid android:color="@color/white" />
</shape>

Paso 8: Creación de un archivo de diseño para category_rv_item

Vaya a la aplicación > res > diseño > category_rv_item y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="130dp"
    android:layout_height="70dp"
    android:layout_gravity="center"
    android:layout_margin="5dp"
    app:cardCornerRadius="8dp">
  
    <!--creating a relative layout on below line-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
  
        <!--creating an image view on below line-->
        <ImageView
            android:id="@+id/idIVCategory"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@color/purple_200" />
  
        <!--creating a text view on below line-->
        <TextView
            android:id="@+id/idTVCategory"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center_horizontal"
            android:text="Category"
            android:textAlignment="center"
            android:textColor="@color/white"
            android:textStyle="bold" />
  
    </RelativeLayout>
      
</androidx.cardview.widget.CardView>

Paso 9: Creación de un archivo de diseño para el elemento en Wallpaper RecyclerView

Navegue a la aplicación> res> diseño> Haga clic con el botón derecho en él> Nuevo> Archivo de recursos de diseño y asígnele el nombre wallpaper_rv_item y agregue el código a continuación. Se agregan comentarios en el código para conocer con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/idCVWallpaper"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_margin="6dp"
    app:cardCornerRadius="8dp">
  
    <!--creating an image view for displaying wallpaper-->
    <ImageView
        android:id="@+id/idIVWallpaper"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_launcher" />
      
</androidx.cardview.widget.CardView>

Paso 10: crear una clase de adaptador para configurar datos en elementos de RecyclerView

Vaya a la aplicación > java > el nombre del paquete de su aplicación > haga clic con el botón derecho en él > Nuevo > clase Java y asígnele el nombre WallpaperRVAdapter y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

Java

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
  
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
  
import com.bumptech.glide.Glide;
  
import java.util.ArrayList;
  
public class WallpaperRVAdapter extends RecyclerView.Adapter<WallpaperRVAdapter.ViewHolder> {
    // creating variables for array list and context.
    private ArrayList<String> wallPaperList;
    private Context context;
  
    // creating a constructor.
    public WallpaperRVAdapter(ArrayList<String> wallPaperList, Context context) {
        this.wallPaperList = wallPaperList;
        this.context = context;
    }
  
    @NonNull
    @Override
    public WallpaperRVAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // inflating our layout file on below line.
        View view = LayoutInflater.from(context).inflate(R.layout.wallpaper_rv_item, parent, false);
        return new ViewHolder(view);
    }
  
    @Override
    public void onBindViewHolder(@NonNull WallpaperRVAdapter.ViewHolder holder, int position) {
        // setting data to all our views.
        Glide.with(context).load(wallPaperList.get(position)).into(holder.wallpaperIV);
        // adding on click listener to item view.
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // passing data through intent on below line.
                Intent i = new Intent(context, WallpaperActivity.class);
                i.putExtra("imgUrl", wallPaperList.get(position));
                context.startActivity(i);
            }
        });
    }
  
    @Override
    public int getItemCount() {
        return wallPaperList.size();
    }
  
    public class ViewHolder extends RecyclerView.ViewHolder {
          
        // creating variables for our views
        // which are created in layout file.
        private CardView imageCV;
        private ImageView wallpaperIV;
  
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            // initializing all the variables.
            wallpaperIV = itemView.findViewById(R.id.idIVWallpaper);
            imageCV = itemView.findViewById(R.id.idCVWallpaper);
        }
    }
}

Paso 11: crear una clase de adaptador para nuestra categoría RecyclerView

Vaya a la aplicación > java > el nombre del paquete de su aplicación > haga clic con el botón derecho en él > Nuevo > clase Java y asígnele el nombre CategoryRVAdapter y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle.

Java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
  
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
  
import com.bumptech.glide.Glide;
  
import java.util.ArrayList;
  
public class CategoryRVAdapter extends RecyclerView.Adapter<CategoryRVAdapter.ViewHolder> {
      
    // creating variables for 
    // array list and context and interface.
    private ArrayList<CategoryRVModal> categoryRVModals;
    private Context context;
    private CategoryClickInterface categoryClickInterface;
  
    // creating a constructor.
    public CategoryRVAdapter(ArrayList<CategoryRVModal> categoryRVModals, Context context, CategoryClickInterface categoryClickInterface) {
        this.categoryRVModals = categoryRVModals;
        this.context = context;
        this.categoryClickInterface = categoryClickInterface;
    }
  
    @NonNull
    @Override
    public CategoryRVAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // inflating our layout file on below line.
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_rv_item, parent, false);
        return new CategoryRVAdapter.ViewHolder(view);
    }
  
    @Override
    public void onBindViewHolder(@NonNull CategoryRVAdapter.ViewHolder holder, int position) {
        // setting data to all our views.
        CategoryRVModal modal = categoryRVModals.get(position);
        holder.categoryTV.setText(modal.getCategory());
        if (!modal.getImgUrl().isEmpty()) {
            Glide.with(context).load(modal.getImgUrl()).into(holder.categoryIV);
  
        } else {
            holder.categoryIV.setImageResource(R.drawable.ic_launcher_background);
        }
        // adding on click listener to item view on below line.
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // passing position with interface.
                categoryClickInterface.onCategoryClick(position);
            }
        });
    }
  
    @Override
    public int getItemCount() {
        return categoryRVModals.size();
    }
  
    // creating an interface on below line.
    public interface CategoryClickInterface {
        void onCategoryClick(int position);
    }
  
    public class ViewHolder extends RecyclerView.ViewHolder {
        // creating variables on below line.
        private TextView categoryTV;
        private ImageView categoryIV;
  
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            // initializing all variables on below line.
            categoryIV = itemView.findViewById(R.id.idIVCategory);
            categoryTV = itemView.findViewById(R.id.idTVCategory);
        }
    }
}

Paso 12: crear una nueva actividad para mostrar un solo fondo de pantalla

Vaya a la aplicación > java > el nombre del paquete de su aplicación > haga clic con el botón derecho en él > Nuevo > Actividad > Seleccione Actividad vacía y asígnele el nombre WallpaperActivity y ahora avanzaremos hacia el trabajo de activity_wallpaper.xml

Paso 13: trabajar con el archivo activity_wallpaper.xml

Vaya a la aplicación > res > diseño > activity_wallpaper.xml y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WallpaperActivity">
  
    <!--creating an image view for displaying image-->
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />
  
    <!--creating a button to set the wallpaper-->
    <Button
        android:id="@+id/idBtnSetWallpaper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="20dp"
        android:layout_marginEnd="20dp"
        android:layout_marginBottom="10dp"
        android:background="@drawable/button_back"
        android:text="Set Wallpaper"
        android:textAllCaps="false"
        android:textColor="@color/white"
        android:textSize="15sp"
        app:backgroundTint="#A6000000" />
  
    <!--creating a progress bar for loading indicator-->
    <ProgressBar
        android:id="@+id/idPBLoading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />
  
</RelativeLayout>

Paso 14: trabajar con el archivo WallpaperActivity.java

Vaya a la aplicación > java > el nombre del paquete de su aplicación > archivo WallpaperActivity.java y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

Java

import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
  
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
  
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.shashank.sony.fancytoastlib.FancyToast;
  
import java.io.IOException;
  
public class WallpaperActivity extends AppCompatActivity {
  
    // on below line we are creating variables 
    // for imageview and wallpaper manager
    WallpaperManager wallpaperManager;
    ImageView image;
    String url;
    private ProgressBar loadingPB;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wallpaper);
          
        // initializing all variables on below line.
        url = getIntent().getStringExtra("imgUrl");
        image = findViewById(R.id.image);
        loadingPB = findViewById(R.id.idPBLoading);
          
        // calling glide to load image from url on below line.
        Glide.with(this).load(url).listener(new RequestListener<Drawable>() {
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                // making progress bar visibility 
                // to gone on below line.
                loadingPB.setVisibility(View.GONE);
                return false;
            }
  
            @Override
            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                // making progress bar visibility to gone
                // on below line when image is ready.
                loadingPB.setVisibility(View.GONE);
                return false;
            }
        }).into(image);
  
        wallpaperManager = WallpaperManager.getInstance(getApplicationContext());
        Button setWallpaper = findViewById(R.id.idBtnSetWallpaper);
  
        // on below line we are adding on click 
        // listener to our set wallpaper button.
        setWallpaper.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Glide.with(WallpaperActivity.this)
                        .asBitmap().load(url)
                        .listener(new RequestListener<Bitmap>() {
                                      @Override
                                      public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Bitmap> target, boolean b) {
                                          Toast.makeText(WallpaperActivity.this, "Fail to load image..", Toast.LENGTH_SHORT).show();
                                          return false;
                                      }
  
                                      @Override
                                      public boolean onResourceReady(Bitmap bitmap, Object o, Target<Bitmap> target, DataSource dataSource, boolean b) {
                                          // on below line we are setting wallpaper using 
                                          // wallpaper manager on below line.
                                          try {
                                              wallpaperManager.setBitmap(bitmap);
                                              Toast.makeText(WallpaperActivity.this, "Wallpaper Set to Home screen.", Toast.LENGTH_SHORT).show();
                                          } catch (IOException e) {
                                              // on below line we are handling exception.
                                              Toast.makeText(WallpaperActivity.this, "Fail to set wallpaper", Toast.LENGTH_SHORT).show();
                                              e.printStackTrace();
                                          }
                                          return false;
                                      }
                                  }
                        ).submit();
                // displaying custom toast on below line.
                FancyToast.makeText(WallpaperActivity.this, "Wallpaper Set to Home Screen", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, false).show();
            }
        });
    }
}

Paso 15: Generación de la clave de API para la API de píxeles

Para generar una API para usar la API de Pexels, simplemente tenemos que ir al sitio de Pexels aquí . Después de ir a este sitio, simplemente tenemos que registrarnos en este sitio web y crear una cuenta. Después de crear una nueva cuenta, simplemente debe iniciar sesión en su cuenta. Después de iniciar sesión en su cuenta. Verá la siguiente pantalla. 

En esta pantalla, simplemente tenemos que hacer clic en la flecha de opción de cuenta y luego simplemente seleccionar la opción API de imagen y video para ver nuestra clave API. Después de hacer clic en esa opción se abrirá una nueva pantalla en la que simplemente debemos hacer clic en la opción Your API key para obtener nuestra clave API. Luego podrá ver su API que se muestra a continuación. 

Ahora usaremos esta clave API en nuestra aplicación. 

Paso 16: trabajar con el archivo MainActivity.java

Actividad principal.java Actividad principal.java

Java

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
  
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
  
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
  
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
  
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
  
public class MainActivity extends AppCompatActivity implements CategoryRVAdapter.CategoryClickInterface {
  
    // creating variables for recyclerview,
    // progress bar, adapter and array list,
    // edittext and others.
    private RecyclerView categoryRV, wallpaperRV;
    private ProgressBar loadingPB;
    private ArrayList<CategoryRVModal> categoryRVModals;
    private ArrayList<String> wallpaperArrayList;
    private CategoryRVAdapter categoryRVAdapter;
    private WallpaperRVAdapter wallpaperRVAdapter;
    private EditText searchEdt;
    private ImageView searchIV;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_screen);
  
        // initializing all variables on below line.
        categoryRV = findViewById(R.id.idRVCategories);
        wallpaperRV = findViewById(R.id.idRVWallpapers);
        searchEdt = findViewById(R.id.idEdtSearch);
        searchIV = findViewById(R.id.idIVSearch);
        loadingPB = findViewById(R.id.idPBLoading);
        wallpaperArrayList = new ArrayList<>();
        categoryRVModals = new ArrayList<>();
  
        // creating a layout manager for
        // recycler view which is our category.
        LinearLayoutManager manager1 = new LinearLayoutManager(MainActivity.this, RecyclerView.HORIZONTAL, false);
  
        // initializing our adapter class on below line.
        wallpaperRVAdapter = new WallpaperRVAdapter(wallpaperArrayList, this);
        categoryRVAdapter = new CategoryRVAdapter(categoryRVModals, this, this);
  
        // setting layout manager to our
        // category recycler view as horizontal.
        categoryRV.setLayoutManager(manager1);
        categoryRV.setAdapter(categoryRVAdapter);
  
        // creating a grid layout manager
        // for our wallpaper recycler view.
        GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
  
        // setting layout manager and
        // adapter to our recycler view.
        wallpaperRV.setLayoutManager(layoutManager);
        wallpaperRV.setAdapter(wallpaperRVAdapter);
  
        // on below line we are calling method to
        // get categories to add data in array list.
        getCategories();
  
        // on below line we are calling get wallpaper
        // method to get data in wallpaper array list.
        getWallpapers();
  
        // on below line we are adding on click listener
        // for search image view on below line.
        searchIV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // inside on click method we are getting data from
                // our search edittext and validating if the input field is empty or not.
                String searchStr = searchEdt.getText().toString();
                if (searchStr.isEmpty()) {
                    Toast.makeText(MainActivity.this, "Please enter something to search", Toast.LENGTH_SHORT).show();
                } else {
                    // on below line we are calling a get wallpaper
                    // method to get wallpapers by category.
                    getWallpapersByCategory(searchStr);
                }
            }
        });
    }
  
    // on below line we are creating a method
    // to get the wallpaper by category.
    private void getWallpapersByCategory(String category) {
        // on below line we are
        // clearing our array list.
        wallpaperArrayList.clear();
        // on below line we are making visibility
        // of our progress bar as gone.
        loadingPB.setVisibility(View.VISIBLE);
        // on below line we are creating a string
        // variable for our url and adding url to it.
        String url = "https://api.pexels.com/v1/search?query=" + category + "&per_page=30&page=1";
        // on below line we are creating a
        // new variable for our request queue.
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        // on below line we are making a json object
        // request to get the data from url .
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                // on below line we are extracting the data from our
                // response and passing it to our array list.
                try {
                    loadingPB.setVisibility(View.GONE);
                    // on below line we are extracting json data.
                    JSONArray photos = response.getJSONArray("photos");
                    for (int i = 0; i < photos.length(); i++) {
                        JSONObject photoObj = photos.getJSONObject(i);
                        String imgUrl = photoObj.getJSONObject("src").getString("portrait");
                        // on below line we are passing
                        // data to our array list
                        wallpaperArrayList.add(imgUrl);
                    }
                    // here we are notifying adapter
                    // that data has changed in our list.
                    wallpaperRVAdapter.notifyDataSetChanged();
                } catch (JSONException e) {
                    // handling json exception
                    // on below line.
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // displaying a simple toast message on error response.
                Toast.makeText(MainActivity.this, "Fail to get data..", Toast.LENGTH_SHORT).show();
            }
        }) {
            @Override
            public Map<String, String> getHeaders() {
                // in this method passing headers as
                // key along with value as API keys.
                HashMap<String, String> headers = new HashMap<>();
                headers.put("Authorization", "Enter your key");
                // at last returning headers.
                return headers;
            }
        };
        queue.add(jsonObjectRequest);
    }
  
    private void getWallpapers() {
        // on below line we are
        // clearing our array list.
        wallpaperArrayList.clear();
        // changing visibility of our
        // progress bar to gone.
        loadingPB.setVisibility(View.VISIBLE);
        // creating a variable for our url.
        String url = "https://api.pexels.com/v1/curated?per_page=30&page=1";
        // on below line we are creating a
        // new variable for our request queue.
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        // on below line we are making a json
        // object request to get the data from url .
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                // on below line we are extracting the data from
                // our response and passing it to our array list.
                loadingPB.setVisibility(View.GONE);
                try {
                    // on below line we are extracting json data.
                    JSONArray photos = response.getJSONArray("photos");
                    for (int i = 0; i < photos.length(); i++) {
                        JSONObject photoObj = photos.getJSONObject(i);
                        String imgUrl = photoObj.getJSONObject("src").getString("portrait");
                        // on below line we are passing
                        // data to our array list
                        wallpaperArrayList.add(imgUrl);
                    }
                    wallpaperRVAdapter.notifyDataSetChanged();
                } catch (JSONException e) {
                    // handling json exception
                    // on below line.
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // displaying a toast message on error response.
                Toast.makeText(MainActivity.this, "Fail to get data..", Toast.LENGTH_SHORT).show();
            }
        }) {
            @Override
            public Map<String, String> getHeaders() {
                // in this method passing headers as
                // key along with value as API keys.
                HashMap<String, String> headers = new HashMap<>();
                headers.put("Authorization", "Enter your key");
                // at last returning headers.
                return headers;
            }
        };
        queue.add(jsonObjectRequest);
    }
  
    private void getCategories() {
        // on below lines we are adding data to our category array list.
        categoryRVModals.add(new CategoryRVModal("Technology", "https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?ixid=MnwxMjA3fDB8MHxzZWFyY2h8MTJ8fHRlY2hub2xvZ3l8ZW58MHx8MHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"));
        categoryRVModals.add(new CategoryRVModal("Programming", "https://images.unsplash.com/photo-1542831371-29b0f74f9713?ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8cHJvZ3JhbW1pbmd8ZW58MHx8MHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=60"));
        categoryRVModals.add(new CategoryRVModal("Nature", "https://images.pexels.com/photos/2387873/pexels-photo-2387873.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Travel", "https://images.pexels.com/photos/672358/pexels-photo-672358.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Architecture", "https://images.pexels.com/photos/256150/pexels-photo-256150.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Arts", "https://images.pexels.com/photos/1194420/pexels-photo-1194420.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Music", "https://images.pexels.com/photos/4348093/pexels-photo-4348093.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Abstract", "https://images.pexels.com/photos/2110951/pexels-photo-2110951.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Cars", "https://images.pexels.com/photos/3802510/pexels-photo-3802510.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
        categoryRVModals.add(new CategoryRVModal("Flowers", "https://images.pexels.com/photos/1086178/pexels-photo-1086178.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"));
    }
  
    @Override
    public void onCategoryClick(int position) {
        // on below line we are getting category from our
        // array list and calling a method
        // to get wallpapers by category.
        String category = categoryRVModals.get(position).getCategory();
        getWallpapersByCategory(category);
    }
}

Ahora ejecute su aplicación y vea el resultado de la aplicación. 

Nota: Todos los archivos dibujables utilizados en la aplicación están presentes en la carpeta dibujable. Echa un vistazo al proyecto en el siguiente enlace de GitHub. 

Enlace GitHub: https://github.com/ChaitanyaMunje/Wallpaper-App

Producción:

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *