Cardview不适合屏幕

时间:2017-05-09 06:57:03

标签: android android-layout

我有一个CardView。在那里我有一个相对布局和内部,我有4个文本视图。 在我的活动中,我在循环器视图中有一个线性布局。 我有一个GridlayoutManager设置为recycler视图。它是水平可滚动的。

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

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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">

答案 2 :(得分:0)

  1. 使您的卡适合屏幕:
    RelativeLayout用于RecyclerViewCardView的父级。

  2. 要使TextView中的文字转到下一行:
    使用android:maxLines

  3. TextView属性

答案 3 :(得分:0)

水平填充从根布局移动到RecyclerView禁用剪裁到填充

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

现在RecyclerView的内容将绘制整个屏幕宽度。当您打开窗口时,内容仍将从16dp开始,但在滚动过去时会显示。

答案 4 :(得分:-2)

您可以在CardView中使用填充。