diff options
| author | 2015-08-20 13:10:33 -0700 | |
|---|---|---|
| committer | 2015-08-20 13:16:36 -0700 | |
| commit | 207968345aa31c4a6286d16ee6a8adb14f64092a (patch) | |
| tree | 1ad1d1801ff457856497c52a4fe827cb6649554f | |
| parent | c091e218afcdddf4d510c14d816facea0537cd99 (diff) | |
Make grid items be square.
Introduce a new GridItem class whose onMeasure method enforces a square
aspect ratio, and use it for rendering items when in grid mode.
Change-Id: Ieda82b644d0155354ee8e4c1dacae4af7436b7aa
4 files changed, 57 insertions, 6 deletions
diff --git a/packages/DocumentsUI/res/layout/item_doc_grid.xml b/packages/DocumentsUI/res/layout/item_doc_grid.xml index 1001e105bcd0..71e618bf4314 100644 --- a/packages/DocumentsUI/res/layout/item_doc_grid.xml +++ b/packages/DocumentsUI/res/layout/item_doc_grid.xml @@ -14,7 +14,7 @@ limitations under the License. --> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<com.android.documentsui.GridItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="@dimen/grid_item_height" android:layout_margin="@dimen/grid_item_margin" @@ -140,4 +140,4 @@ android:contentDescription="@null" android:duplicateParentState="true" /> -</FrameLayout> +</com.android.documentsui.GridItem> diff --git a/packages/DocumentsUI/res/layout/item_loading_grid.xml b/packages/DocumentsUI/res/layout/item_loading_grid.xml index 005a111beabd..147dfd449724 100644 --- a/packages/DocumentsUI/res/layout/item_loading_grid.xml +++ b/packages/DocumentsUI/res/layout/item_loading_grid.xml @@ -14,7 +14,7 @@ limitations under the License. --> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<com.android.documentsui.GridItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="@dimen/grid_height" android:orientation="horizontal"> @@ -26,4 +26,4 @@ android:indeterminate="true" style="?android:attr/progressBarStyle" /> -</FrameLayout> +</com.android.documentsui.GridItem> diff --git a/packages/DocumentsUI/res/layout/item_message_grid.xml b/packages/DocumentsUI/res/layout/item_message_grid.xml index 385563df64f6..45d61a506bb5 100644 --- a/packages/DocumentsUI/res/layout/item_message_grid.xml +++ b/packages/DocumentsUI/res/layout/item_message_grid.xml @@ -14,7 +14,7 @@ limitations under the License. --> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<com.android.documentsui.GridItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="@dimen/grid_height" android:paddingStart="?android:attr/listPreferredItemPaddingStart" @@ -48,4 +48,4 @@ </LinearLayout> -</FrameLayout> +</com.android.documentsui.GridItem> diff --git a/packages/DocumentsUI/src/com/android/documentsui/GridItem.java b/packages/DocumentsUI/src/com/android/documentsui/GridItem.java new file mode 100644 index 000000000000..990dca70f9c6 --- /dev/null +++ b/packages/DocumentsUI/src/com/android/documentsui/GridItem.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.documentsui; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.FrameLayout; + +/** + * A FrameLayout subclass used by DirectoryFragment. Ensures that the resulting grid item is always + * square. + */ +public class GridItem extends FrameLayout { + public GridItem(Context context) { + super(context); + } + + public GridItem(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public GridItem(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // Grid layout uses item width to figure out the number of columns, then dynamically fits + // rows into the view. The upshot of this is that changing the item width will mess up the + // grid layout - so to make the items square, throw out the height and use the width for + // both dimensions. The grid layout will correctly adjust the row height. + // + // Note that this code will need to be changed if the layout manager's orientation is + // changed from VERTICAL to HORIZONTAL. + super.onMeasure(widthMeasureSpec, widthMeasureSpec); + } +} |