13

I am using VerticalGridFragment to display items in a grid-like layout I don't need to show search or title and I want the rows to start from top of the screen without any margins. Any help?example in the image below

nadine87
  • 500
  • 5
  • 17
  • Could you show the screen shot please. – Jay Rathod Aug 18 '16 at 12:42
  • @jaydroider I edited my question, check the screenshot – nadine87 Aug 19 '16 at 06:16
  • You mean you want to move this rows to just below top section right ? – Jay Rathod Aug 19 '16 at 06:17
  • yes, i was able to remove the titleview section and give it height=0, but i still can't figure out a way to move the rows up – nadine87 Aug 19 '16 at 06:39
  • Could you tell me this is the full screen which you provided or you have left side items also connected with rows ? or simply you have this much rows only in *Browse Fragment*. – Jay Rathod Aug 19 '16 at 06:47
  • this is fullscreen, i want items to be coming from bottom of the screen, nothing on the left, i don't need the headers, I disabled them – nadine87 Aug 19 '16 at 07:02
  • the concept is for a TV channel list, when the user presses OK button, he will see this menu with his channel list, the reason why i need it like this, is for better user experience (not covering the TV area, he can still watch TV while going through channel list) – nadine87 Aug 19 '16 at 07:04
  • Follow my answer below and let me know if you face any issue. – Jay Rathod Aug 19 '16 at 07:16
  • Have you tried my answer ? have you get it working or not ? Let me know if you face any issue or have any doubt related to my answer. – Jay Rathod Aug 20 '16 at 07:41

5 Answers5

13

I found a way to do it by overriding the VerticalGridPresenter of the VerticalGridFragment then getting the VerticalGridView, and setting top padding to a smaller value. In the CustomVerticalGridPresenter class (that extends VerticalGridPresenter), override this method:

@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);
}

Then in the VerticalGridFragment, assign the new CustomVerticalGridPresenter as following:

 CustomVerticalGridPresenter gridPresenter = new CustomVerticalGridPresenter();
    gridPresenter.setNumberOfColumns(NUM_COLUMNS);
    setGridPresenter(gridPresenter);
Jared Rummler
  • 37,824
  • 19
  • 133
  • 148
nadine87
  • 500
  • 5
  • 17
7

You need create new class with name CustomVerticalGridPresenter and put followig code in it.

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);
    }
}

Then in verticalgridfragment class use

CustomVerticalGridPresenter videoGridPresenter = new 
CustomVerticalGridPresenter(ZOOM_FACTOR, false);

instead of

VerticalGridPresentervideoGridPresenter = new VerticalGridPresenter(ZOOM_FACTOR, false);
Jared Rummler
  • 37,824
  • 19
  • 133
  • 148
mehmoodnisar125
  • 1,469
  • 18
  • 14
4

Another way over this problem is to set the windowAlignment attributes of the VerticalGridView. Most notably ...

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
Mapar
  • 61
  • 4
2

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>

Now you can be able to split your rows up exact below of top section of your Browse Fragment.

Community
  • 1
  • 1
Jay Rathod
  • 11,131
  • 6
  • 34
  • 58
  • Thank you for the help, I am trying to do as explained, I am getting Resource not found error as following: android.view.InflateException: Binary XML file line #17: Error inflating class android.support.v17.leanback.widget.TitleView – nadine87 Aug 22 '16 at 07:49
  • @nadine87 Can you please edit your question and add this full *Logcat* information in above question and also mention what changes you made and raised this exception. Because this *dimen* file is not using any resources. you have something else mismatch. – Jay Rathod Aug 22 '16 at 07:56
  • It's not, it should be using leanback layouts, I didn't make any changes, i just added the dimens file to res/values and I edited it to add my custom dimen values, the projects run then a runtime exception occurs. I can't copy logcat, it's too long to be fitted here Note: there a 2 similar errors (Error inflating class android.support.v17.leanback.widget.TitleView and SearchOrbView) – nadine87 Aug 22 '16 at 08:15
  • @nadine87 Yes it should use `Lean back layouts` that's why i have mentioned that above exception is not because of *dimen* file but because of something else. `dimen` files are just using the *values in dp* for all layouts which are provided by *leanback*. And i have the same issue of displaying row from top i have solved it by changing only dp values in dimen file nothing else. – Jay Rathod Aug 22 '16 at 08:18
  • this solution could help, but it didn't work with me, I found the right solution, please check my next answer – nadine87 Aug 24 '16 at 05:43
  • it works for browse fragment not for verticalgrid fragment – mehmoodnisar125 Dec 12 '18 at 06:27
0

The best way is to create a theme and set it for your Activity / Fragment.

In themes.xml:

<style name="AppTheme.Leanback.NoTitle" parent="Theme.Leanback.Browse">
    <item name="browseRowsMarginTop">@dimen/lb_browse_rows_margin_top_none</item>>
</style>

in dimens.xml

<dimen name="lb_browse_rows_margin_top_none">32dp</dimen>
aleksandrbel
  • 1,422
  • 3
  • 20
  • 38