【问题标题】:Create whitespace to add textView创建空白以添加 textView
【发布时间】:2016-08-18 16:28:10
【问题描述】:

我正在关注 [this][1] 教程,我已经成功创建了相册,我现在想做的是在 4 个相册之后说或示例。我想添加一些空格,这样我就可以在这里添加一个 TextField 我的问题是:

  1. 如何创建所需的空格?
  2. 如何在此特定位置的文本字段中添加?

这是我尝试过的。示例代码有一个准备相册的方法,我把这个方法分成了两个方法,如下:

 private void prepareAlbums() {
        int[] covers = new int[]{
                R.drawable.album1,
                R.drawable.album2,
                R.drawable.album3,
                R.drawable.album4,
                R.drawable.album5,
                R.drawable.album6,
                R.drawable.album7,
                R.drawable.album8,
                R.drawable.album9,
                R.drawable.album10,
                R.drawable.album11};

        Album a = new Album("True Romance", 13, covers[0]);
        albumList.add(a);

        a = new Album("Xscpae", 8, covers[1]);
        albumList.add(a);

        a = new Album("Maroon 5", 11, covers[2]);
        albumList.add(a);

        a = new Album("Born to Die", 12, covers[3]);
        albumList.add(a);

        rootView.setPadding(0,100,0,0);


        adapter.notifyDataSetChanged();
    }

还有……

private void prepareAlbums2(){
        int[] covers = new int[]{
                R.drawable.album1,
                R.drawable.album2,
                R.drawable.album3,
                R.drawable.album4,
                R.drawable.album5,
                R.drawable.album6,
                R.drawable.album7,
                R.drawable.album8,
                R.drawable.album9,
                R.drawable.album10,
                R.drawable.album11};
        Album a = new Album("Honeymoon", 14, covers[4]);
        albumList.add(a);

        a = new Album("I Need a Doctor", 1, covers[5]);
        albumList.add(a);

        a = new Album("Loud", 11, covers[6]);
        albumList.add(a);

        a = new Album("Legend", 14, covers[7]);
        albumList.add(a);

        a = new Album("Hello", 11, covers[8]);
        albumList.add(a);

        a = new Album("Greatest Hits", 17, covers[9]);
        albumList.add(a);

        adapter.notifyDataSetChanged();

    }
}

然后在我的 onCreate 方法中,我执行了以下操作:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

...

  prepareAlbums();
  rootView.setPadding(0,100,0,0);
  prepareAlbums2();

...
  return rootView;
}

但是,当我这样做时似乎什么都没有发生,而且我不知道如何在创建间距后在该位置添加文本,非常感谢任何帮助。

如果需要任何其他信息,请询问并更新此帖子。

【问题讨论】:

  • 使用空间或视图在您的 XML 文件中添加特定数量的空间
  • 我将如何在我想要的特定位置执行此操作?因为我使用专辑方法来生成专辑,例如,在 4 张专辑之后我该怎么做
  • 添加一张图片解释你想要什么将清除你的要求。所以画你的设计然后在这里添加。
  • 有点乱,但说明了我需要什么drive.google.com/file/d/0B4vL9wnJulKoYVlnX1F1bUlwTDQ/…
  • 我建议添加一个空白的TextView,并根据需要设置大小。

标签: java android xml android-layout view


【解决方案1】:

修改GridSpacingItemDecoration 类以在位于位置 X 和 X+1 的两张卡片的底部添加额外空间。

更新:

考虑到你想要一个文本视图,事实证明这并不太难。 There is a great example here

解决方案涉及创建回调以根据位置动态确定列数。当您到达第 4 个位置时,您必须修改跨度大小以返回一个。

GridLayoutManager manager = new GridLayoutManager(this, 3);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override
  public int getSpanSize(int position) {
    return (3 - position % 3);
  }
});
recyclerView.setLayoutManager(manager);

您还需要在适配器中创建一个案例来显示 TextView 而不是普通的卡片视图。

2016 年 8 月 19 日更新添加了详细信息:

在MainActivity中,添加一个回调,根据位置返回span大小。我们将通过向数据集添加一个虚拟值来确定位置。

 ((GridLayoutManager)mLayoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
         @Override
         public int getSpanSize(int position) {
            if ( albumList.get(position).getName().length() == 0)
               return 2;
            return 1;
         }
      });

添加数据时,在您希望文本所在的位置添加一个虚拟值。理想情况下,您可以更改类或向类添加属性。为简单起见,没有名称的专辑将是一个文本行。

a = new Album("Born to Die", 12, covers[3]);
albumList.add(a);

albumList.add(new Album("",0, 0));

a = new Album("Honeymoon", 14, covers[4]);
albumList.add(a);

最后,在您的适配器代码中,重写 getItemViewType() 方法,以便您的 RecyclerView 可以支持多种视图类型。

// Change the extending class type
public class AlbumsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

// Add this 
public class TextViewHolder extends RecyclerView.ViewHolder {
      public TextView textView;
      public TextViewHolder(View itemView) {
         super(itemView);
         textView = (TextView) itemView.findViewById(R.id.text3);
      }
   }

// Add this
@Override
public int getItemViewType(int position) {
   if ( albumList.get(position).getName().length() == 0)
      return 1;
   return 0;
}

@Override
   public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View itemView = null;
      switch ( viewType ) {
         case 0:
            itemView = LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.album_card, parent, false);
            return new MyViewHolder(itemView);
         case 1:
            itemView = LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.text_layout, parent, false);
            return new TextViewHolder(itemView);
      }

      return null;
   }

   @Override
   public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
      Album album = albumList.get(position);
      if ( album.getName().length() == 0) {
         TextViewHolder text = (TextViewHolder)holder;
         text.textView.setText("New Text");
      } else {
         final MyViewHolder myHolder = (MyViewHolder)holder;
         myHolder.title.setText(album.getName());
         myHolder.count.setText(album.getNumOfSongs() + " songs");

         // loading album cover using Glide library
         Glide.with(mContext).load(album.getThumbnail()).into(myHolder.thumbnail);

         myHolder.overflow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               showPopupMenu(myHolder.overflow);
            }
         });
      }
   }
}

您还需要 TextView 行的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/text3"/>
</LinearLayout>

【讨论】:

  • 目前不在电脑上,但当我重新开始时,我会尝试这个,但有一个问题,如果我按照您的建议进行操作,这不会为每 2 张卡创建一个空格吗?我只是想要它,所以前 4 个像上面那样分组,然后是“我的文本”,其余的都分组,如果有意义的话,不要每 2 个左右分开一次
  • 哦,我错过了中间文本的要求。印刷品很小,我想它只是说这里有空间或什么的。此解决方案不起作用。
  • 您还有其他的想法吗?我已经尝试了几天才在这里提问并且非常卡住。
  • 修改了我的答案,希望能奏效。
  • 我真的很困惑 :( ,我会在哪个类中添加你上面提到的代码,这个案例究竟会是什么样子?我只是对回收站视图有点困惑跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多