VerticalGridView.java revision f272f7533fcb5aba341e9ab2f4ff0421d668a8ca
19106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn/*
29106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project
39106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn *
49106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
59106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at
69106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn *
79106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0
89106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn *
99106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License
109106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
119106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under
129106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * the License.
139106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn */
149106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbournpackage android.support.v17.leanback.widget;
159106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn
169106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbournimport android.content.Context;
17cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbournimport android.content.res.TypedArray;
18cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbournimport android.support.v17.leanback.R;
199106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbournimport android.support.v7.widget.RecyclerView;
209106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbournimport android.util.AttributeSet;
21f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stoutimport android.util.TypedValue;
22f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stoutimport android.view.ViewGroup;
239106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn
249106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn/**
259106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * A view that shows items in a vertically scrolling list. The items come from
269106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn * the {@link RecyclerView.Adapter} associated with this view.
279106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn */
28a8a3b898da49324e83ea32c3f08776a481312166Tim Kilbournpublic class VerticalGridView extends BaseGridView {
299106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn
30a8a3b898da49324e83ea32c3f08776a481312166Tim Kilbourn    public VerticalGridView(Context context) {
319106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn        this(context, null);
329106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn    }
339106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn
34a8a3b898da49324e83ea32c3f08776a481312166Tim Kilbourn    public VerticalGridView(Context context, AttributeSet attrs) {
359106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn        this(context, attrs, 0);
369106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn    }
379106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn
38a8a3b898da49324e83ea32c3f08776a481312166Tim Kilbourn    public VerticalGridView(Context context, AttributeSet attrs, int defStyle) {
399106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn        super(context, attrs, defStyle);
409106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn        mLayoutManager.setOrientation(RecyclerView.VERTICAL);
41cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        initAttributes(context, attrs);
42cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    }
43cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn
44cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    protected void initAttributes(Context context, AttributeSet attrs) {
45a8a3b898da49324e83ea32c3f08776a481312166Tim Kilbourn        initBaseGridViewAttributes(context, attrs);
46cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.lbVerticalGridView);
47f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        setColumnWidth(a);
48cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        setNumColumns(a.getInt(R.styleable.lbVerticalGridView_numberOfColumns, 1));
49cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        a.recycle();
50cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    }
51cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn
52f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout    void setColumnWidth(TypedArray array) {
53f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        TypedValue typedValue = array.peekValue(R.styleable.lbVerticalGridView_columnWidth);
54f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        int size;
55f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        if (typedValue != null && typedValue.type == TypedValue.TYPE_DIMENSION) {
56f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout            size = array.getDimensionPixelSize(R.styleable.lbVerticalGridView_columnWidth, 0);
57f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        } else {
58f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout            size = array.getInt(R.styleable.lbVerticalGridView_columnWidth, 0);
59f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        }
60f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout        setColumnWidth(size);
61f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout    }
62f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout
63cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    /**
64f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout     * Set the number of columns.  Defaults to one.
65cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn     */
66cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    public void setNumColumns(int numColumns) {
67cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        mLayoutManager.setNumRows(numColumns);
68cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        requestLayout();
69cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    }
70cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn
71cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    /**
72cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn     * Set the column width.
73f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout     *
74f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout     * @param width May be WRAP_CONTENT, or a size in pixels. If zero,
75f272f7533fcb5aba341e9ab2f4ff0421d668a8caCraig Stout     * column width will be fixed based on number of columns and view width.
76cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn     */
77cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn    public void setColumnWidth(int width) {
78cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        mLayoutManager.setRowHeight(width);
79cfbb302b7a67d1633b1a68f659ed41aa71702507Tim Kilbourn        requestLayout();
809106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn    }
819106804a84e5e8733e0b9313f749fa1f726e5d11Tim Kilbourn}
82