VerticalGridView.java revision a00bada00bff4a58436a39472ab14ccb7a8f619d
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14package android.support.v17.leanback.widget;
15
16import android.content.Context;
17import android.content.res.TypedArray;
18import android.support.v17.leanback.R;
19import android.support.v7.widget.RecyclerView;
20import android.util.AttributeSet;
21import android.util.TypedValue;
22
23/**
24 * A {@link android.view.ViewGroup} that shows items in a vertically scrolling list. The items
25 * come from the {@link RecyclerView.Adapter} associated with this view.
26 */
27public class VerticalGridView extends BaseGridView {
28
29    public VerticalGridView(Context context) {
30        this(context, null);
31    }
32
33    public VerticalGridView(Context context, AttributeSet attrs) {
34        this(context, attrs, 0);
35    }
36
37    public VerticalGridView(Context context, AttributeSet attrs, int defStyle) {
38        super(context, attrs, defStyle);
39        mLayoutManager.setOrientation(RecyclerView.VERTICAL);
40        initAttributes(context, attrs);
41    }
42
43    protected void initAttributes(Context context, AttributeSet attrs) {
44        initBaseGridViewAttributes(context, attrs);
45        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.lbVerticalGridView);
46        setColumnWidth(a);
47        setNumColumns(a.getInt(R.styleable.lbVerticalGridView_numberOfColumns, 1));
48        a.recycle();
49    }
50
51    void setColumnWidth(TypedArray array) {
52        TypedValue typedValue = array.peekValue(R.styleable.lbVerticalGridView_columnWidth);
53        if (typedValue != null) {
54            int size = array.getLayoutDimension(R.styleable.lbVerticalGridView_columnWidth, 0);
55            setColumnWidth(size);
56        }
57    }
58
59    /**
60     * Sets the number of columns.  Defaults to one.
61     */
62    public void setNumColumns(int numColumns) {
63        mLayoutManager.setNumRows(numColumns);
64        requestLayout();
65    }
66
67    /**
68     * Sets the column width.
69     *
70     * @param width May be {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT}, or a size
71     *              in pixels. If zero, column width will be fixed based on number of columns
72     *              and view width.
73     */
74    public void setColumnWidth(int width) {
75        mLayoutManager.setRowHeight(width);
76        requestLayout();
77    }
78}
79