【问题标题】:Cardview not fitting in screenCardview 不适合屏幕
【发布时间】:2017-05-09 06:57:03
【问题描述】:

我有一个 CardView。在那里我有一个相对布局,里面有 4 个文本视图。 在我的活动中,我在回收站视图中有一个线性布局。 我将 GridlayoutManager 设置为回收站视图。它可以水平滚动。

卡片是根据卡片文本视图中的文本大小创建的。

我的代码:

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);

适配器类:

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>

卡片.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>

我只希望卡片大小适合屏幕。即如果文本不适合一行,它应该到达下一行而不是水平扩展。

【问题讨论】:

  • 如果 span 为 1,则使用线性布局管理器
  • 给 textview 添加左右边距。
  • 是的..我的跨度是 1..我一次想要一张卡片并且卡片尺寸相同
  • @Akshay 不用担心 liniar 布局管理器也可以这样做...或者您可以在这里提供概念用户界面吗?

标签: android android-layout


【解决方案1】:

对于单个跨度计数,使用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>

【讨论】:

  • 是线性布局还是相对布局?你打开了线性布局,关闭了相对布局..请编辑
  • 文本视图并排显示..不是一个在另一个之下
  • @Akshay 将android:orientation="vertical" 放在LinearLayout 上。线性布局的默认方向是水平的。
  • @Akshay 我忘了把android:orientation="vertical" 放在线性布局中
  • 我试过了..卡片大小相同,但内容没有完全显示
【解决方案2】:

删除这些行,以便删除填充。

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

【讨论】:

  • @Akshay 这很奇怪,因为当没有填充时,内容将绘制在整个屏幕上。这至少解决了部分问题,我没有从Nope.. 那里得到那种氛围。做出反应时始终要具体。
【解决方案3】:
  1. 使您的卡片适合屏幕:
    使用RelativeLayout 作为RecyclerViewCardView 的父级。

  2. 要将TextView 中的文本转到下一行:
    为您的TextView 使用android:maxLines 属性

【讨论】:

  • 永远不要使用RelativeLayout作为根元素!它性能低下(总是测量孩子两次)。
  • @EugenPechanec 那么作为根元素有什么更高的性能呢?
【解决方案4】:

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

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

现在RecyclerView 的内容将覆盖整个屏幕宽度。当您打开窗口时,内容仍会从 16dp 开始,但在滚动过去填充时将可见。

【讨论】:

  • 我希望屏幕外的文本出现在下一行
  • 您能否指导我...它显示为上图
  • 卡片中的所有内容(包括卡片)都应将宽度设置为match_parent。不要使用RelativeLayout
  • 在卡片内的线性布局中,当所有内容都设置为匹配父级时,第一个文本视图覆盖整个屏幕,其他任何内容都不会显示
  • @Akshay 只是宽度,当然不是高度。高度应该是 wrap_content。
【解决方案5】:

您可以在 CardView 中使用填充。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多