Remove top margin from BrowseFragment in Android TV
Asked Answered
E

3

7

How can I remove blank space, as shown in dotted box in below image from BrowseFragment. I managed to remove search button and title. Although, I also want to remove blank space and move video row at top of screen.

Is there any way to do this?

I tried setting following in my AppTheme, but I doubt it helps:

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

enter image description here

Ectomere answered 27/10, 2016 at 9:8 Comment(3)
You can do this by modifying leanback layouts itself.Polyp
I had tried changing following: FrameLayout topHeader = (FrameLayout) getView().findViewById(R.id.browse_headers_dock); topHeader.setVisibility(View.GONE); But its not removing that space. can you suggest which layout I should look to edit?Ectomere
Check my answer and let me know if you face any issue.Polyp
P
13

You can do this using it's dimens.xml which is provided in v17 Lean Back library.

Follow the steps below first.

  1. Go to your sdk -> extras -> android -> support -> v17 -> leanback -> res -> values.

  2. From their copy dimens.xml file into your current leanback project values folder.

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

  4. Open that file and find below dimen.

Default value may be 167dp given.

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

So change it to around 30dp or as per your need.

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

You will get the rows up in Browse Fragment.

Polyp answered 28/10, 2016 at 7:12 Comment(2)
Could you please add to the answer steps, how you found out that this name was exactly lb_browse_rows_margin_top?Peh
for easy lookup use => cmd + shift + f (global search on mac, look for windows) and then paste "lb_browse_rows_margin_top" to get the desired file suggestions.Edlyn
D
4

If you need to remove the header margin in only the fragment instead of globally overwrite the 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;
}
Dubuffet answered 4/9, 2017 at 9:45 Comment(2)
where do we have to add it?Slr
@AparAmin extend the BrowseFragment and overwrite the onCreateView method public class CustomBrowseFragment extends BrowseFragment{}Dubuffet
G
-1

the IanZ solution works perfectly. Other way to get the main container is FrameLayout containerDock = getView().findViewById(R.id.browse_container_dock); in the main fragment without override oncreateView method.

Gloomy answered 8/4, 2019 at 19:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.