2017-05-09 156 views
0

我有CardView。在那裏我有一個相對佈局,裏面有4個文本視圖。 在我的活動中,我有一個線性佈局,在一個Recycler視圖。 我有一個GridlayoutManager設置爲回收視圖。它是水平滾動的。Cardview不適合屏幕

enter image description here

enter image description here

的卡越來越在卡的文本視圖文本的大小創建。

我的代碼:

Activity.java

protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_first_page); 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     data_list = new ArrayList<>(); 
     load_data(); 
     gridLayoutManager = new GridLayoutManager(this, 1,LinearLayoutManager.HORIZONTAL,false); 
     recyclerView.setLayoutManager(gridLayoutManager); 

     adapter = new CustomAdapter(this,data_list); 
     recyclerView.setAdapter(adapter); 

AdapterClass:

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

    private Context context; 
    private List<MyData> my_data; 

    public CustomAdapter(Context context, List<MyData> my_data) { 
     this.context = context; 
     this.my_data = my_data; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false); 
     itemView.setMinimumWidth(parent.getMeasuredWidth()); 
     itemView.setMinimumHeight(parent.getMeasuredHeightAndState()); 
     return new ViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) 
    { 
     holder.userstory.setText(my_data.get(position).getUserstory()); 
     holder.tasks.setText(my_data.get(position).getTask()); 
     holder.actual.setText(my_data.get(position).getActuals()); 
     holder.estimate.setText(my_data.get(position).getTodos()); 
     holder.seekBar.setMax(my_data.get(position).getEstimate()); 
     holder.seekBar.setProgress(my_data.get(position).getActual()); 
    } 

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

    public class ViewHolder extends RecyclerView.ViewHolder 
    { 
     public TextView userstory,tasks,actual,estimate; 
     public SeekBar seekBar; 

     public ViewHolder(View itemView) 
     { 
      super(itemView); 
      userstory=(TextView) itemView.findViewById(R.id.tvUserStory); 
      tasks=(TextView) itemView.findViewById(R.id.tvTask); 
      actual=(TextView) itemView.findViewById(R.id.tvActual); 
      estimate=(TextView) itemView.findViewById(R.id.tvEstimate); 
      seekBar=(SeekBar)itemView.findViewById(R.id.seekBar); 

     } 
    } 
} 

Activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 
</LinearLayout> 

Card.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/linear1" 
    > 

    <android.support.v7.widget.CardView 
     android:id="@+id/card_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:elevation="3dp" 
     card_view:cardUseCompatPadding="true" 
     card_view:cardElevation="4dp" 
     card_view:cardCornerRadius="1dp"> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:id="@+id/tvUserStory" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentStart="true" 
       android:layout_alignParentEnd="true" 
       android:text="@string/us" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:id="@+id/tvTask" 
       android:layout_below="@+id/tvUserStory" 
       android:layout_alignParentStart="true" 
       android:layout_alignParentEnd="true" 
       android:text="@string/task" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:id="@+id/tvActual" 
       android:layout_below="@+id/tvTask" 
       android:layout_alignParentStart="true" 
       android:layout_alignParentEnd="true" 
       android:text="@string/actual" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:id="@+id/tvEstimate" 
       android:layout_alignParentStart="true" 
       android:layout_below="@+id/tvActual" 
       android:layout_alignParentEnd="true" 
       android:text="@string/estimate" /> 



      <SeekBar 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/circularSeekBar1" 
       android:layout_below="@+id/tvEstimate" 
       android:layout_alignParentStart="true" 
       android:layout_alignParentEnd="true" 
       android:indeterminate="false"/> 


     </RelativeLayout> 

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

</LinearLayout> 

我只是想要卡的大小適合screen.ie如果文本不適合一行應該到下一行,而不是水平擴大。 enter image description here

+0

如果您跨度爲1,則使用線性佈局管理器 –

+0

將左右邊距也添加到textview中。 –

+0

是的..我的跨度是1 ..我想要一張卡片一次和相同的卡片大小 – Akshay

回答

2

對於單跨計數使用LinearLayoutManager爲適配器

mRecyclerView.setLayoutManager(
       new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL, false)); 

更改cardview代碼像那樣

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    card_view:cardUseCompatPadding="true" 
    card_view:cardElevation="4dp" 
    card_view:cardCornerRadius="1dp"> 

    <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:textAppearance="?android:attr/textAppearanceLarge" 
      android:id="@+id/tvUserStory" 
      android:text="@string/us" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:id="@+id/tvTask" 
      android:layout_below="@+id/tvUserStory" 
      android:text="@string/task" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:id="@+id/tvActual" 
      android:text="@string/actual" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:id="@+id/tvEstimate" 
      android:text="@string/estimate" /> 

     <SeekBar 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/circularSeekBar1" 
      android:indeterminate="false"/> 
    </LinearLayout> 
</android.support.v7.widget.CardView> 
+0

它是一個線性佈局還是相對佈局?你已經打開了一個線性佈局並關閉了一個相對佈局..請編輯 – Akshay

+0

它正在顯示另一個 – Akshay

+0

並排顯示的文字瀏覽..不一個在另一個下面 – Akshay

1

刪除這些行以刪除填充。

android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin"> 
+0

不。我試過 – Akshay

+0

@Akshay這很奇怪,因爲當沒有填充時,內容會在整個屏幕上繪製。這至少解決了部分問題,而且我沒有從'Nope..'那裏得到那種感覺。反應時一定要具體。 –

-2

您可以在CardView中使用填充。

0
  1. 爲了讓你的卡適合屏幕:
    使用RelativeLayoutRecyclerViewCardView的父母。

  2. 爲了讓您在TextView文本到下一行:
    使用android:maxLines屬性爲您TextView

+2

從不使用'RelativeLayout'作爲*根元素*!它表現不佳(總是衡量孩子兩次)。 –

+0

@EugenPechanec那麼作爲根元素還有什麼更高性能? – jayeshsolanki93

0

移動水平填充從根佈局到RecyclerView禁用剪切到填充

<RecyclerView 
    android:paddingStart="16dp" 
    android:paddingEnd="16dp" 
    android:clipToPadding="false"/> 

現在RecyclerView的內容將繪製整個屏幕寬度。當您打開窗口時,內容仍然以16dp開頭,但在滾動過去的填充時將會顯示。

+0

我想要在屏幕上的文字是在下一行 – Akshay

+0

你能指導我在這...當我改變textview在卡(Linaear佈局)來包裝顯示整個內容(卡尺寸擴大屏幕尺寸),如果匹配父母,則顯示爲上述圖像 – Akshay

+0

卡(包括卡)中的所有內容都應設置爲「match_parent」的寬度。不要使用'RelativeLayout'。 –