19c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin/* 29c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * Copyright (C) 2014 The Android Open Source Project 39c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * 49c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 59c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * in compliance with the License. You may obtain a copy of the License at 69c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * 79c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 89c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * 99c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * Unless required by applicable law or agreed to in writing, software distributed under the License 109c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 119c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * or implied. See the License for the specific language governing permissions and limitations under 129c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * the License. 139c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin */ 149c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkinpackage android.support.v17.leanback.widget; 159c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin 169c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkinimport android.content.Context; 179c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkinimport android.util.AttributeSet; 189c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkinimport android.view.View; 199c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkinimport android.widget.FrameLayout; 209c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin 219c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin/** 229c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * Customized FrameLayout excludes margin of child from calculating the child size. 239c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * So we can change left margin of rows while keep the width of rows unchanged without 249c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin * using hardcoded DIPS. 25fa0b9a00b48394bd9b7e5d54b2b4a5a33d7bd186Eino-Ville Talvala * @hide 26fa0b9a00b48394bd9b7e5d54b2b4a5a33d7bd186Eino-Ville Talvala */ 27fa0b9a00b48394bd9b7e5d54b2b4a5a33d7bd186Eino-Ville Talvalapublic class BrowseRowsFrameLayout extends FrameLayout { 289c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin 299c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin public BrowseRowsFrameLayout(Context context) { 3012da140082323d9aa048b3e928505a0a2adfdda7Yin-Chia Yeh this(context ,null); 319c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin } 329c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin 339c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin public BrowseRowsFrameLayout(Context context, AttributeSet attrs) { 349c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin this(context, attrs, 0); 359c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin } 36b0056642cab30647d1f72190d864622bf4728ea0Yin-Chia Yeh 379c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin public BrowseRowsFrameLayout(Context context, AttributeSet attrs, 389c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin int defStyle) { 399c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin super(context, attrs, defStyle); 409c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin } 419c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin 42b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala @Override 43b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala protected void measureChildWithMargins(View child, 44b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala int parentWidthMeasureSpec, int widthUsed, 45b67a3b36fd569e63c1b8ca6b2701c34c7a3927c1Eino-Ville Talvala int parentHeightMeasureSpec, int heightUsed) { 469c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams(); 479c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, 489c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin getPaddingLeft() + getPaddingRight() + widthUsed, lp.width); 499c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec, 509c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin getPaddingTop() + getPaddingBottom() + heightUsed, lp.height); 519c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin child.measure(childWidthMeasureSpec, childHeightMeasureSpec); 529c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin } 539c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin 549c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin} 559c595174ccaaf3d36315c4a100e47ee4369073f6Igor Murashkin