Distancia entre RecyclerView demasiado lejos

Actualmente soy un principiante en el desarrollo de android y he estado siguiendo algunos ejercicios / tutorial aquí y allá y me enfrento a un problema donde la distancia entre los elementos de RecyclerView está demasiado lejos unos de otros como se muestra en la imagen de abajo. ¿Cómo lo hago más cerca el uno del otro? He estado buscando todo pero nada funciona.

EDIT: Después de cambiar android:layout_height = "match_parent" a android:layout_height = "wrap_content" todavía no hay cambios en el diseño.

Así que incluyo mis clases de java largo

RecyclerView Captura de pantalla

Aquí está mi .xml

custom_row_news_items.xml

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Small Text" android:id="@+id/date_text" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" /> <ImageView android:src="@drawable/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/thumb_img" android:layout_below="@+id/date_text" android:layout_centerHorizontal="true" /> <TextView android:background="#006699" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/title_text" android:layout_alignBottom="@+id/thumb_img" android:layout_centerHorizontal="true" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/des_text" android:layout_below="@+id/thumb_img" android:layout_centerHorizontal="true" /> </RelativeLayout> 

content_navigation_drawer.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" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/app_bar_navigation_drawer" tools:context="com.example.azrie.dummyvoicethenews.NavigationDrawer"> <android.support.v7.widget.RecyclerView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/recyclerView"/> </RelativeLayout> 

Aquí están mis clases de java

NavigationDrawer.java

 import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.widget.RecyclerView; import android.view.View; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; public class NavigationDrawer extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navigation_drawer); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); RSSread rssRead; rssRead = new RSSread(this,recyclerView); rssRead.execute(); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.navigation_drawer, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) { // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } } 

RSSread.java

 public class RSSread extends AsyncTask{ Context context; ProgressDialog progressDialog; //RSS address String address = "https://www.sciencemag.org/rss/news_current.xml"; URL url; //Global initialization for other class to access ArrayList<FeedItem> feedItems; RecyclerView recyclerView; public RSSread(Context context, RecyclerView recyclerView){ //Initialize recycle view this.recyclerView = recyclerView; //Initialize progress dialog this.context = context; progressDialog = new ProgressDialog(context); progressDialog.setMessage("Loading...."); } @Override protected void onPreExecute() { //display progress dialog before fetching data progressDialog.show(); super.onPreExecute(); } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); //dismiss the "Loading..." progress dialog progressDialog.dismiss(); MyAdapter adapter = new MyAdapter(context,feedItems); recyclerView.setLayoutManager(new LinearLayoutManager(context)); recyclerView.setAdapter(adapter); } @Override protected Object doInBackground(Object[] objects) { ProcessXml(Getdata()); return null; } private void ProcessXml(Document data) { //If data is present or not = null if(data!=null){ //ArrayList is created to store every item into a single item feedItems = new ArrayList<>(); //Return document element name that is RSS ( Exercise Part 1 ) //Log.d("Root", data.getDocumentElement().getNodeName()); //Element object that store "Root" element Element root = data.getDocumentElement(); //Items are inside channel and channel tag is first child of root tag Node channel = root.getChildNodes().item(1); //Store all child of channel element NodeList items = channel.getChildNodes(); //Loop through each child of element //Output testing //Log.d("ItemsLength",Integer.toString(items.getLength())); for (int i = 0; i < items.getLength(); i++){ //Create new node that will store data Node currentChild = items.item(i); //Check currentChild node is item node if (currentChild.getNodeName().equalsIgnoreCase("item")){ //Create a new feed item for every item FeedItem item = new FeedItem(); //Exercise Part 2 : How to process data NodeList itemChild = currentChild.getChildNodes(); //Loop through all childs with item tag for(int j = 0; j < itemChild.getLength(); j++){ Node current = itemChild.item(j); //Display context of Node Current ( Exercise Part 1 : How to process data ) //Log.d("textContent",current.getTextContent()); //check for node title node if(current.getNodeName().equalsIgnoreCase("title")){ //Set title from FeedItem into current title item.setTitle(current.getTextContent()); //Output test Log.d("CurrentItemTitle",current.getTextContent()); } else if(current.getNodeName().equalsIgnoreCase("description")){ //Set description from FeedItem into current description item.setDescr(current.getTextContent()); //Output test Log.d("CurrentItemDesp",current.getTextContent()); } else if(current.getNodeName().equalsIgnoreCase("pubDate")){ //Set pubDate from FeedItem into current pubDate item.setPubDate(current.getTextContent()); //Output test Log.d("CurrentItemPubDate",current.getTextContent()); } else if(current.getNodeName().equalsIgnoreCase("link")){ //Set link from FeedItem into current link item.setLink(current.getTextContent()); //Output test Log.d("CurrentItemLink",current.getTextContent()); } else if(current.getNodeName().equalsIgnoreCase("media:thumbnail")){ String url = current.getAttributes().item(0).getTextContent(); item.setThumbnailUrl(url); //Output test Log.d("CurrentItemThumbnailUrl",current.getTextContent()); } } feedItems.add(item); Log.d("ItemTitle",item.getTitle()); Log.d("ItemDescription",item.getDescr()); Log.d("ItemLink",item.getLink()); Log.d("ItemPubDate",item.getPubDate()); Log.d("ItemThumbnailUrl",item.getThumbnailUrl()); } } } } //method that return Document type public Document Getdata(){ try { //Passing the string to URL (From Address) url = new URL(address); //Open connection HttpURLConnection connection; connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); InputStream inputStream = connection.getInputStream(); //Create new instance of document build DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); //Return XML document Document xmlDoc = builder.parse(inputStream); //Return xmlDoc return xmlDoc; } catch (Exception e) { e.printStackTrace(); return null; } } } 

MyAdapter.java

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { ArrayList<FeedItem> feedItems; Context context; public MyAdapter(Context context,ArrayList<FeedItem> feedItems){ this.feedItems = feedItems; this.context = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.custom_row_news_items,parent,false); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { } @Override public int getItemCount() { return feedItems.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { public MyViewHolder(View itemView) { super(itemView); } } } 

Lo siento, es un poco complicado. Todavía no estoy acostumbrado al formato aquí.

En custom_row_news_items.xml, android:layout_height="match_parent" debería ser android:layout_height="wrap_content . Debido a match_parent, está ocupando el espacio de toda la pantalla.Recuerde siempre que la única fila para recyclerview debe tener altura wrap_content si Tiene disposición vertical.

También puede intentar cambiar los parámetros de anchura de altura de recyclerview a

  android:layout_width="match_parent" android:layout_height="match_parent" 

Estoy especulando que debido a su altura está configurada para envolver el contenido, es sólo tomar una sola fila. Pero con match_parent, acomodará tantos como pueda en la pantalla.

Solo cambia tu altura de diseño de padre de ser android:layout_height="match_parent" a android:layout_height="wrap_content y resolverá tu problema, ya que tu contenedor de diseño de fila tiene wrap_content y tu diseño de fila intenta igualar la altura del padre que llenará Una pantalla completa, y su único componente ha tomado una altura completa de la pantalla.

Cambios en el diseño de la fila:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Small Text" android:id="@+id/date_text" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" /> <ImageView android:src="@drawable/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/thumb_img" android:layout_below="@+id/date_text" android:layout_centerHorizontal="true" /> <TextView android:background="#006699" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/title_text" android:layout_alignBottom="@+id/thumb_img" android:layout_centerHorizontal="true" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/des_text" android:layout_below="@+id/thumb_img" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Modifique su custom_row_news_items.xml siguiente manera.

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Small Text" android:id="@+id/date_text" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" /> <ImageView android:src="@drawable/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/thumb_img" android:layout_below="@+id/date_text" android:layout_centerHorizontal="true" /> <TextView android:background="#006699" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/title_text" android:layout_alignBottom="@+id/thumb_img" android:layout_centerHorizontal="true" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Medium Text" android:id="@+id/des_text" android:layout_below="@+id/thumb_img" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Establezca la altura RelativeLayout como wrap_content . Actualmente su conjunto a match_parent que está tomando los espacios.

Esto sucede incluso cuando cambia la altura de wrap_content a wrap_content porque RelativeLayout no sabe cuán alto debe ser.

Establezca la altura de wrap_content en wrap_content e intente agregar lo siguiente al último TextView .

 android:layout_alignParentBottom="true" 

Esto indica que la parte inferior de RelativeLayout se alineará con la última TextView , por lo que ahora el RelativeLayout sabe dónde finalizar.

  • Android: Sugerencia necesaria para actualizar la vista del reciclador en el elemento seleccionado de la ruleta
  • RecyclerView desplazado UP / DOWN oyente
  • Android recyclerView findViewHolderForAdapterPosition devuelve null
  • Actualización de un ProgressBar en un RecyclerView
  • Resaltar el elemento seleccionado dentro de un RecyclerView
  • Centrar verticalmente el elemento seleccionado en RecyclerView
  • Confirmación y eliminación de deshacer en RecyclerView
  • GridLayoutManager setSpanCount no funciona en OnClickListener de un botón
  • RecyclerView se bloquea cuando "las vistas desechadas o conectadas no se pueden reciclar"
  • Eliminar elementos basados ​​en el cursor en RecyclerView
  • ¿Cómo hacer que la vista de reciclador comience a agregar elementos desde el centro?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.