Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView水平包裹内容最大尺寸_Android_Android Recyclerview - Fatal编程技术网

Android RecyclerView水平包裹内容最大尺寸

Android RecyclerView水平包裹内容最大尺寸,android,android-recyclerview,Android,Android Recyclerview,我有一个RecyclerView(下图)和一些从API加载的内容(图片和文本)。我希望所有行的高度完全相同,但是文本的长度可能会有很大的差异。因此,黄色框应该更大,以匹配包含更多文本的绿色框。这有意义吗 目前,我使用的是设置为水平的LinearLayoutManager,但我还使用了一个具有1行的GridLayoutManager进行了测试,这会产生相同的效果 我还使用setAutoMeasureEnabled设置为true 有没有一种简单的方法可以通过RecyclerView实现这一点 如果

我有一个RecyclerView(下图)和一些从API加载的内容(图片和文本)。我希望所有行的高度完全相同,但是文本的长度可能会有很大的差异。因此,黄色框应该更大,以匹配包含更多文本的绿色框。这有意义吗

目前,我使用的是设置为水平的LinearLayoutManager,但我还使用了一个具有1行的GridLayoutManager进行了测试,这会产生相同的效果

我还使用setAutoMeasureEnabled设置为true

  • 有没有一种简单的方法可以通过RecyclerView实现这一点

  • 如果没有,那么最好如何计算高度并将其发送给每个视图持有者

  • 谢谢,

    应要求:

    主要活动onCreate中的我的初始化:

    mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
    
        // use a linear layout manager
        mLayoutManager = new GridLayoutManager(MainActivity.this, 1, GridLayoutManager.HORIZONTAL, false);
        mLayoutManager.setAutoMeasureEnabled(true);
    
        mRecyclerView.setLayoutManager(mLayoutManager);
    
        setUpSomeData();
    
        TopFilmsCard card1 = (TopFilmsCard)cards.get(0);
        mAdapter = new FilmsAdapter(card1.getFilms());
        mRecyclerView.setAdapter(mAdapter);
    
    电影摄影师

     private class FilmsAdapter
            extends RecyclerView.Adapter<FilmsCardHolder> {
    
        private List<Film> films;
    
        public FilmsAdapter(List<Film> films) {
            this.films = films;
        }
    
        @Override
        public int getItemViewType(int position) {
            return R.layout.holder_top_films;
        }
    
        @Override
        public FilmsCardHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
            return new FilmsCardHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.holder_film, parent, false));
        }
    
        @Override
        public void onBindViewHolder(FilmsCardHolder holder, int position) {
            holder.bindCard(films.get(position));
        }
    
        @Override
        public int getItemCount() {
            return films.size();
        }
    }
    
    }

    activity_main.xml

     <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/activity_main"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    
      <android.support.v7.widget.RecyclerView
          android:id="@+id/recyclerView"
          android:scrollbars="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#CCD1D9"/>
    
    
    

    胶卷

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/layoutFilm"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      android:background="#5D9CEC">
    
      <TextView
          android:id="@+id/lblFilmName"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:gravity="center_horizontal"
          android:padding="10dp"
          android:textSize="22sp"/>
    
      <ImageView
          android:id="@+id/imgPicture"
          android:layout_width="100dp"
          android:layout_height="100dp"
          android:layout_gravity="center_horizontal"
          />
    
    
    

    共享您的viewholder xml文件,以及您与初始化和设置AdapterPleaseEded相关的代码,很多代码与中所述完全相同-感谢您让holder高度与父级和recyclerview高度包裹内容匹配。那可能work@howdoidothis在这种情况下,它将覆盖整个屏幕。这是一个有点不寻常的情况。在绑定过程中,您可以在适配器的变量中存储(到目前为止)行的最大值,并且每当您面对一个包含更多行的
    TextView
    时,您可以
    notifyDataSetChanged
    并在其
    TextView
    中用额外的空行重新绘制前面的项目(根据此变量)。这不是很有效,但可能符合您需要的逻辑。
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/layoutFilm"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      android:background="#5D9CEC">
    
      <TextView
          android:id="@+id/lblFilmName"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:gravity="center_horizontal"
          android:padding="10dp"
          android:textSize="22sp"/>
    
      <ImageView
          android:id="@+id/imgPicture"
          android:layout_width="100dp"
          android:layout_height="100dp"
          android:layout_gravity="center_horizontal"
          />