RecyclerView Margin

问题描述:

我正在开发家庭安全应用程序。必须实现的功能之一是能够查看连接的设备(用于发送通知,阻止访问等)。到目前为止,我已经能够创建设备的RecyclerView列表,除了这个列表中的卡片之间没有间隔之外,一切都是完美的(对我来说)。RecyclerView Margin


它现在的样子

enter image description here


device_data_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:cardview="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="80dp" 
android:layout_margin="8dp"> 

<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="80dp"> 

<ImageView 
    android:id="@+id/deviceIcon" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:scaleType="centerCrop" 
    android:layout_marginLeft="8dp" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="80dp" 
    android:layout_alignBottom="@+id/deviceIcon" 
    android:layout_toEndOf="@+id/deviceIcon"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Username" 
     android:id="@+id/deviceUsername" 
     android:layout_gravity="center_vertical" 
     android:textColor="#000000" 
     android:layout_marginLeft="5dp" /> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:layout_gravity="center_vertical" 
     android:gravity="center_vertical|center_horizontal"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="25dp" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Device Model" 
      android:gravity="center_vertical|right" 
      android:textColor="#000000" 
      android:id="@+id/deviceModel" 
      android:layout_marginLeft="5dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="25dp" 
      android:textColor="#000000" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="Device Version" 
      android:gravity="center_vertical|right" 
      android:id="@+id/deviceVersion" 
      android:layout_marginLeft="5dp" /> 
    </LinearLayout> 
</LinearLayout> 

012截图


devices_list.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:padding="@dimen/activity_vertical_margin"> 

    <view 
     android:id="@+id/connectedDevicesList" 
     class="android.support.v7.widget.RecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerInParent="true" /> 
</RelativeLayout> 

查看持有人代码

import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.exampleapp.R; 

public class DeviceViewHolder extends RecyclerView.ViewHolder { 

    protected ImageView  deviceIcon; 
    protected TextView  deviceUsername; 
    protected TextView  deviceModel; 
    protected TextView  deviceVersion; 

    public DeviceViewHolder(View view) { 
     super(view); 
     this.deviceIcon   = (ImageView) view.findViewById(R.id.deviceIcon); 
     this.deviceUsername  = (TextView) view.findViewById(R.id.deviceUsername); 
     this.deviceModel  = (TextView) view.findViewById(R.id.deviceModel); 
     this.deviceVersion  = (TextView) view.findViewById(R.id.deviceVersion); 
    } 
} 

RecyclerView适配器

import android.content.Context; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import java.util.List; 

import com.exampleapp.API.AuthorizedDevice; 
import com.exampleapp.R; 

public class ConnectedDeviceAdapter extends RecyclerView.Adapter<DeviceViewHolder> { 
    private List<AuthorizedDevice> devices; 
    private Context mContext; 

    public ConnectedDeviceAdapter(Context context, List<AuthorizedDevice> devices) { 
     this.devices = devices; 
     this.mContext = context; 
    } 

    @Override 
    public DeviceViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.connected_devices_layout, null); 

     DeviceViewHolder viewHolder = new DeviceViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(DeviceViewHolder deviceViewHolder, int i) { 
     AuthorizedDevice device = devices.get(i); 

     if (device.getDeviceId().equals("0")) { 
      deviceViewHolder.deviceIcon.setBackground(ContextCompat.getDrawable(mContext, R.drawable.android_icon)); 
     } else { 
      deviceViewHolder.deviceIcon.setBackground(ContextCompat.getDrawable(mContext, R.drawable.apple_icon)); 
     } 

     deviceViewHolder.deviceUsername.setText(device.getUsername()); 
     deviceViewHolder.deviceModel.setText(device.getDeviceName()); 
     deviceViewHolder.deviceVersion.setText(device.getDeviceVersion()); 
    } 

    @Override 
    public int getItemCount() { 
     return (null != devices ? devices.size() : 0); 
    } 
} 

谁能帮我解决这个问题?非常感谢您提前!

+0

我强烈建议编辑您的问题到一个更小的版本 - 这将是很难吸引这么多代码张贴好的答案。 – Toby

在你RecyclerView适配器onCreateViewHolder

取代:

View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.connected_devices_layout, null); 

有:

View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.connected_devices_layout, viewGroup, false); 

或者您可以使用RecyclerView.addItemDecoration(ItemDecoration decor)

+0

非常感谢您的回答。它现在就像一种魅力! –