【问题标题】:Leanback VerticalGridFragment remove top spacingLeanback VerticalGridFragment 删除顶部间距
【发布时间】:2019-06-04 06:31:32
【问题描述】:

我正在使用 VerticalGridFragment 以类似网格的布局显示项目 我不需要显示搜索或标题,我希望行从屏幕顶部开始,没有任何边距。有什么帮助吗?

【问题讨论】:

  • 能否请您显示屏幕截图。
  • @jaydroider 我编辑了我的问题,查看截图
  • 你的意思是你想把这行移到右上方的正下方?
  • 是的,我能够删除 titleview 部分并将其设置为 height=0,但我仍然无法找到向上移动行的方法
  • 你能告诉我这是你提供的全屏还是你的左侧项目也与行相连?或者只是您只有在 Browse Fragment 中有这么多行。

标签: android android-layout leanback


【解决方案1】:

我找到了一种方法,方法是覆盖 VerticalGridFragmentVerticalGridPresenter,然后获取 VerticalGridView,并将顶部填充设置为更小价值。 在 CustomVerticalGridPresenter 类(扩展 VerticalGridPresenter)中,重写此方法:

@Override
protected void initializeGridViewHolder(ViewHolder vh) {
    super.initializeGridViewHolder(vh);
    gridView = vh.getGridView();
    int top= 20;//this is the new value for top padding
    int bottom = gridView.getPaddingBottom();
    int right = gridView.getPaddingRight();
    int left = gridView.getPaddingLeft();
    gridView.setPadding(left,top,right,bottom);
}

然后在 VerticalGridFragment 中,分配新的 CustomVerticalGridPresenter,如下所示:

 CustomVerticalGridPresenter gridPresenter = new CustomVerticalGridPresenter();
    gridPresenter.setNumberOfColumns(NUM_COLUMNS);
    setGridPresenter(gridPresenter);

【讨论】:

  • 是的,它有效。但您需要以更好的方式解释您的答案。
【解决方案2】:

您需要创建一个名为 CustomVerticalGridPresenter 的新类,并在其中输入以下代码.

public class CustomVerticalGridPresenter extends VerticalGridPresenter {

    VerticalGridView gridView;

    CustomVerticalGridPresenter(int zoom, boolean val){
        super(zoom, val);
    }

    @Override
    protected void initializeGridViewHolder(ViewHolder vh) {
        super.initializeGridViewHolder(vh);
        gridView = vh.getGridView();
        int top = 20;//this is the new value for top padding
        int bottom = gridView.getPaddingBottom();
        int right = gridView.getPaddingRight();
        int left = gridView.getPaddingLeft();
        gridView.setPadding(left,top,right,bottom);
    }
}

然后在verticalgridfragment类中使用

CustomVerticalGridPresenter videoGridPresenter = new 
CustomVerticalGridPresenter(ZOOM_FACTOR, false);

而不是

VerticalGridPresentervideoGridPresenter = new VerticalGridPresenter(ZOOM_FACTOR, false);

【讨论】:

    【解决方案3】:

    解决这个问题的另一种方法是设置 VerticalGridView 的 windowAlignment 属性。最值得注意的是......

    verticalGridView.windowAlignment = BaseGridView.WINDOW_ALIGN_LOW_EDGE //this will remove the top margin
    verticalGridView.windowAlignmentOffset = 0
    verticalGridView.windowAlignmentOffsetPercent = 25f //find correct values for your case
    

    【讨论】:

      【解决方案4】:

      First of follow this steps to move the rows up which is by default given margins by Lean back Library.

      1. Go to you SDK.

      2. Inside SDK -> extras -> android -> support -> v17 -> leanback -> res -> values.

      3. Inside values folder copy the dimens.xml inside your current project and copy to your projects res -> values folder.

      Now you have the file name dimens.xml inside your values folder.

      Now open the dimens.xml file which you have copied.

      Change the value for property defined below. By default it will given 168dp around that. So make it less to decrease the top margin as i have given below.

      <dimen name="lb_browse_rows_margin_top">35dp</dimen>
      

      现在您可以在您的 Browse Fragment 顶部的正下方拆分行。

      【讨论】:

      • 感谢您的帮助,我正在尝试按照说明进行操作,但出现 Resource not found 错误如下:android.view.InflateException: Binary XML file line #17: Error inflating class android. support.v17.leanback.widget.TitleView
      • @nadine87 您能否编辑您的问题并在上述问题中添加完整的 Logcat 信息,并提及您所做的更改并引发了此异常。因为这个 dimen 文件没有使用任何资源。你还有其他不匹配的东西。
      • 不是,它应该使用leanback布局,我没有做任何更改,我只是将dimens文件添加到res/values并编辑它以添加我的自定义dimen值,项目运行然后发生运行时异常。无法复制logcat,太长了这里装不上注意:有2个类似的错误(Error inflating class android.support.v17.leanback.widget.TitleView and SearchOrbView)
      • @nadine87 是的,它应该使用Lean back layouts 这就是为什么我提到上述异常不是因为 dimen 文件而是因为其他原因。 dimen 文件只是将 dp 中的值 用于 leanback 提供的所有布局。而且我有从顶部显示行的相同问题我已经通过仅更改 dimen 文件中的 dp 值来解决它。
      • 这个解决方案可能有帮助,但它对我不起作用,我找到了正确的解决方案,请检查我的下一个答案