ControlBar.java revision aa93f6777233b789feb14d95d900b158d0ac4841
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.graphics.Rect; 18import android.util.AttributeSet; 19import android.view.View; 20import android.widget.LinearLayout; 21 22class ControlBar extends LinearLayout { 23 24 private int mChildMarginFromCenter; 25 26 public ControlBar(Context context, AttributeSet attrs) { 27 super(context, attrs); 28 } 29 30 public ControlBar(Context context, AttributeSet attrs, int defStyle) { 31 super(context, attrs, defStyle); 32 } 33 34 @Override 35 public boolean requestFocus(int direction, Rect previouslyFocusedRect) { 36 if (getChildCount() > 0) { 37 if (getChildAt(getChildCount() / 2).requestFocus(direction, previouslyFocusedRect)) { 38 return true; 39 } 40 } 41 return super.requestFocus(direction, previouslyFocusedRect); 42 } 43 44 public void setChildMarginFromCenter(int marginFromCenter) { 45 mChildMarginFromCenter = marginFromCenter; 46 } 47 48 @Override 49 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 50 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 51 if (mChildMarginFromCenter <= 0) { 52 return; 53 } 54 55 int totalExtraMargin = 0; 56 for (int i = 0; i < getChildCount() - 1; i++) { 57 View first = getChildAt(i); 58 View second = getChildAt(i+1); 59 int measuredWidth = first.getMeasuredWidth() + second.getMeasuredWidth(); 60 int marginStart = mChildMarginFromCenter - measuredWidth / 2; 61 LayoutParams lp = (LayoutParams) second.getLayoutParams(); 62 int extraMargin = marginStart - lp.getMarginStart(); 63 lp.setMarginStart(marginStart); 64 second.setLayoutParams(lp); 65 totalExtraMargin += extraMargin; 66 } 67 setMeasuredDimension(getMeasuredWidth() + totalExtraMargin, getMeasuredHeight()); 68 } 69} 70