从 Android TV 中的 BrowseFragment 中删除上边距

Posted

技术标签:

【中文标题】从 Android TV 中的 BrowseFragment 中删除上边距【英文标题】:Remove top margin from BrowseFragment in Android TV 【发布时间】:2017-03-09 21:35:20 【问题描述】:

如何删除空格,如下图BrowseFragment 中的虚线框所示。我设法删除了搜索按钮和标题。虽然,我还想删除空白空间并将视频行移动到屏幕顶部。

有没有办法做到这一点?

我尝试在我的 AppTheme 中设置以下内容,但我怀疑它是否有帮助:

    <item name="browseRowsMarginTop">0dp</item>
    <item name="browsePaddingTop">0dp</item>

【问题讨论】:

你可以通过修改leanback layouts本身来做到这一点。 我曾尝试更改以下内容:FrameLayout topHeader = (FrameLayout) getView().findViewById(R.id.browse_headers_dock); topHeader.setVisibility(View.GONE); 但它并没有删除那个空间。你能建议我应该编辑哪个布局吗? 查看我的回答,如果您遇到任何问题,请告诉我。 【参考方案1】:

您可以使用 dimens.xml 库中提供的 dimens.xml 来执行此操作。

Follow the steps below first.

    转到你的sdk -> extras -> android -> support -> v17 -> leanback -> res -> values

    从他们的副本dimens.xml 文件到您当前的leanback 项目values 文件夹中。

    现在您的项目values 文件夹中有dimens.xml 文件。

    打开该文件并在下面找到dimen

默认值可能是167dp

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

所以将其更改为 30dp 左右或根据您的需要。

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

您将在Browse Fragment 中获取行。

【讨论】:

能否请您添加答案步骤,您是如何发现这个名字正是lb_browse_rows_margin_top 便于查找使用 => cmd + shift + f(mac上全局搜索,查找windows)然后粘贴“lb_browse_rows_margin_top”以获得所需的文件建议。【参考方案2】:

如果您需要仅删除片段中的页眉边距而不是全局覆盖 BrowseFragment:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    View view = super.onCreateView(inflater, container, savedInstanceState);
    FrameLayout containerDock = (FrameLayout) view.findViewById(R.id.browse_container_dock);
    FrameLayout.MarginLayoutParams params = (FrameLayout.MarginLayoutParams) containerDock.getLayoutParams();
    Resources resources = inflater.getContext().getResources();
    int newHeaderMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, resources.getDisplayMetrics());
    int offsetToZero = -resources.getDimensionPixelSize(R.dimen.lb_browse_rows_margin_top);
    params.topMargin = offsetToZero+newHeaderMargin;
    containerDock.setLayoutParams(params);
    return view;

【讨论】:

我们必须在哪里添加它? @AparAmin 扩展 BrowseFragment 并覆盖 onCreateView 方法 public class CustomBrowseFragment extends BrowseFragment【参考方案3】:

IanZ 解决方案完美运行。获取主容器的其他方法是 FrameLayout containerDock = getView().findViewById(R.id.browse_container_dock); 在没有覆盖 oncreateView 方法的主片段中。

【讨论】:

以上是关于从 Android TV 中的 BrowseFragment 中删除上边距的主要内容,如果未能解决你的问题,请参考以下文章

Android TV 从 URL 播放视频

当我从一个菜单移动到另一个菜单并返回时,Leanback android Tv 中的 BrowseSupportFragment 会调用服务器

Android TV:VerticalGridFragment 行项目对齐

从 logcat Android-TV 中提取命令

Android TV 开发-->Leanback 中的 VerticalGridView

Android TV 中的 RecyclerView 项目焦点