2016-09-29 2 views
1

--- TLDR ---

Я следую учебник, где с помощью cardview и recyclerview я должен быть в состоянии перечислить текст под друг друга, как это: , как это должно вид выглядят как (изображение не требуется) Android CardView ошибка набивка

, как это выглядит на самом деле

--- ПРОБЛЕМА ---

Как указано в заголовке, и, как видно на картинке, кажется, что у них огромный отступы между двумя элементами карты, что явно не то, что я хотел бы иметь. Я хочу, чтобы они были ближе друг к другу, как это видно на другой картине.

Пожалуйста, имейте в виду, что им является ультра-начинающий программист: D. Спасибо за все ответы заранее.

--- КОД ---

cards_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:tag="cards main container"> 

     <android.support.v7.widget.CardView 
      android:layout_width="300dp" 
      android:layout_height="60dp" 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      card_view:cardElevation="5dp" 
      card_view:cardUseCompatPadding="true" 
      card_view:cardBackgroundColor="#FFF" 
      android:id="@+id/card_view" 
      android:layout_gravity="center_horizontal"> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center_horizontal" 
         android:layout_marginTop="10dp" 
         android:text="Marketing Tip" 
         android:id="@+id/textviewName" 
         android:textColor="#000"/> 

       </LinearLayout> 

     </android.support.v7.widget.CardView> 

</LinearLayout> 

HomeActivity.java

import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.DefaultItemAnimator; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 

import java.util.ArrayList; 

public class HomeActivity extends AppCompatActivity { 

    private static RecyclerView.Adapter adapter; 
    private RecyclerView.LayoutManager layoutManager; 
    private static RecyclerView recyclerView; 
    private static ArrayList<DataModel> data; 
    static View.OnClickListener myOnClickListener; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     setTitle("Home"); 


     myOnClickListener = new myOnClickListener(this); 


     recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     recyclerView.setHasFixedSize(true); 

     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     data = new ArrayList<DataModel>(); 
     for (int i = 0; i < MyData.nameArray.length; i++) { 
      data.add(new DataModel(
        MyData.nameArray[i], 
        MyData.id_[i] 
      )); 

      adapter = new CustomAdapter(data); 
      recyclerView.setAdapter(adapter); 

     } 

    } 

     private static class myOnClickListener implements View.OnClickListener { 

      private final Context context; 

      private myOnClickListener(Context context) { 
       this.context = context; 
      } 

      @Override 
      public void onClick(View v) { 
       //TODO WRITE THE CODE TO START AN ACTIVITY ONCE THE CARDVIEW IS CLICKED 
      } 
     } 

} 

CustomAdapter.java

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder>{ 

    private ArrayList<DataModel> dataSet; 

    public static class MyViewHolder extends RecyclerView.ViewHolder { 

     TextView textviewName; 


     public MyViewHolder(View itemView) { 
      super(itemView); 
      this.textviewName = (TextView)itemView.findViewById(R.id.textviewName); 

     } 
    } 

    public CustomAdapter(ArrayList<DataModel> data){ 
     this.dataSet = data; 

    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cards_layout, parent, false); 
     view.setOnClickListener(HomeActivity.myOnClickListener); 

     MyViewHolder myViewHolder = new MyViewHolder(view); 

     return myViewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int listPosition) { 

     TextView textviewName = holder.textviewName; 

     textviewName.setText(dataSet.get(listPosition).getName()); 


    } 

    @Override 
    public int getItemCount() { 
     return dataSet.size(); 
    } 
} 

DataModel.java

public class DataModel { 
    String name; 
    int id_; 

    public DataModel(String name, int id_) { 

     this.name = name; 
     this.id_ = id_; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getId() { 
     return id_; 
    } 
} 

MyData.java

public class MyData { 

    static String[] nameArray = {"Buzi", "Kocsog", "Fostalicska", "CiganyTibi"}; 

    static Integer[] id_ = {0, 1, 2, 3}; 
} 
+0

Почему у вас жесткая кодировка ширины экрана ** android: layout_width = "300dp" **? изменить его на ** android: layout_width = "match_parent" ** –

ответ

1
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:tag="cards main container"> 

     <android.support.v7.widget.CardView 
      android:layout_width="300dp" 
      android:layout_height="60dp" 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      card_view:cardElevation="5dp" 
      card_view:cardUseCompatPadding="true" 
      card_view:cardBackgroundColor="#FFF" 
      android:id="@+id/card_view" 
      android:layout_gravity="center_horizontal"> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center_horizontal" 
         android:layout_marginTop="10dp" 
         android:text="Marketing Tip" 
         android:id="@+id/textviewName" 
         android:textColor="#000"/> 

       </LinearLayout> 

     </android.support.v7.widget.CardView> 

</LinearLayout> 

Используйте это как свой макет карты.Вы в основном использовали match_parent для линейного макета, заставляя представление заполнить весь экран. Изменение его на wrap_content должно выполнять эту работу. Отдых в порядке.

1

Heyho,

Im также новичок, но я предполагаю, что это связано с вашей высотой linearlayout в card_layout.xml.

Попробуйте использовать wrap_content вместо match_parent. В противном случае u раздует карту, соответствующий размер вашего recyclerView.

Надеюсь, это поможет вам.

Томас

1
<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/card_task" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    card_view:contentPadding="16dp" 
    card_view:cardElevation="2dp" 
    card_view:cardCornerRadius="5dp" 
    layout_height="wrap_content" 
    layout_width="wrap_content" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 


     <TextView 
      android:id="@+id/desc" 
      android:padding="5dp" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Description" /> 

    </LinearLayout> 
</android.support.v7.widget.CardView> 

выше файл макета работал для меня. Надеюсь, это поможет

Смежные вопросы