PreferenceFrameLayout.java revision 35c8be065541fc818cc06567acd3c763b5f86056
12266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira/* 22266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * Copyright (C) 2010 The Android Open Source Project 32266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * 42266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License"); 52266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * you may not use this file except in compliance with the License. 62266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * You may obtain a copy of the License at 72266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * 82266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 92266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * 102266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * Unless required by applicable law or agreed to in writing, software 112266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 122266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * See the License for the specific language governing permissions and 142266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * limitations under the License. 152266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira */ 162266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 172266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereirapackage android.preference; 182266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 192266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereiraimport android.content.Context; 202266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereiraimport android.content.res.TypedArray; 212266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereiraimport android.util.AttributeSet; 222266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereiraimport android.view.View; 232266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereiraimport android.widget.FrameLayout; 242266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 252266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira/** 262266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira * @hide 272266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira */ 282266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereirapublic class PreferenceFrameLayout extends FrameLayout { 292266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira private static final int DEFAULT_TOP_PADDING = 0; 302266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira private static final int DEFAULT_BOTTOM_PADDING = 0; 312266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira private final int mTopPadding; 322266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira private final int mBottomPadding; 332266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira private boolean mPaddingApplied = false; 342266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 352266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira public PreferenceFrameLayout(Context context) { 362266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira this(context, null); 372266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 382266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 392266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira public PreferenceFrameLayout(Context context, AttributeSet attrs) { 402266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira this(context, attrs, com.android.internal.R.attr.preferenceFrameLayoutStyle); 412266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 422266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 432266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyle) { 442266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira super(context, attrs, defStyle); 452266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira TypedArray a = context.obtainStyledAttributes(attrs, 462266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0); 472266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 4835c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira float density = context.getResources().getDisplayMetrics().density; 4935c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira int defaultTopPadding = (int) (density * DEFAULT_TOP_PADDING + 0.5f); 5035c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira int defaultBottomPadding = (int) (density * DEFAULT_BOTTOM_PADDING + 0.5f); 5135c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira 5235c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira mTopPadding = a.getDimensionPixelSize( 532266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira com.android.internal.R.styleable.PreferenceFrameLayout_topPadding, 5435c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira defaultTopPadding); 5535c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira mBottomPadding = a.getDimensionPixelSize( 562266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira com.android.internal.R.styleable.PreferenceFrameLayout_bottomPadding, 5735c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira defaultBottomPadding); 5835c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira 5935c8be065541fc818cc06567acd3c763b5f86056Mindy Pereira 602266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 612266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira a.recycle(); 622266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 632266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira 642266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira @Override 652266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira public void addView(View child) { 662266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira int topPadding = getPaddingTop(); 672266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira int bottomPadding = getPaddingBottom(); 682266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira // Check on the id of the child before adding it. 692266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira if (child != null && child.getId() != com.android.internal.R.id.default_preference_layout) { 702266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira // Add the padding to the view group after determining if the padding already exists. 712266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira if (!mPaddingApplied) { 722266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira topPadding += mTopPadding; 732266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira bottomPadding += mBottomPadding; 742266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira mPaddingApplied = true; 752266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 762266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } else { 772266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira if (mPaddingApplied) { 782266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira topPadding -= mTopPadding; 792266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira bottomPadding -= mBottomPadding; 802266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira mPaddingApplied = false; 812266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 822266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 832266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira int previousTop = getPaddingTop(); 842266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira int previousBottom = getPaddingBottom(); 852266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira if (previousTop != topPadding || previousBottom != bottomPadding) { 862266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira setPadding(getPaddingLeft(), topPadding, getPaddingRight(), bottomPadding); 872266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 882266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira super.addView(child); 892266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira } 902266b92072b2eda16ef71ed6f3d8811159b756deMindy Pereira}