diff --git a/core/java/android/preference/PreferenceFrameLayout.java b/core/java/android/preference/PreferenceFrameLayout.java new file mode 100644 index 0000000000000..426abf0222ef7 --- /dev/null +++ b/core/java/android/preference/PreferenceFrameLayout.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2010 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 android.preference; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.View; +import android.widget.FrameLayout; + +/** + * @hide + */ +public class PreferenceFrameLayout extends FrameLayout { + private static final int DEFAULT_TOP_PADDING = 0; + private static final int DEFAULT_BOTTOM_PADDING = 0; + private final int mTopPadding; + private final int mBottomPadding; + private boolean mPaddingApplied = false; + + public PreferenceFrameLayout(Context context) { + this(context, null); + } + + public PreferenceFrameLayout(Context context, AttributeSet attrs) { + this(context, attrs, com.android.internal.R.attr.preferenceFrameLayoutStyle); + } + + public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + TypedArray a = context.obtainStyledAttributes(attrs, + com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0); + + mTopPadding = (int) a.getDimension( + com.android.internal.R.styleable.PreferenceFrameLayout_topPadding, + DEFAULT_TOP_PADDING); + mBottomPadding = (int) a.getDimension( + com.android.internal.R.styleable.PreferenceFrameLayout_bottomPadding, + DEFAULT_BOTTOM_PADDING); + + a.recycle(); + } + + @Override + public void addView(View child) { + int topPadding = getPaddingTop(); + int bottomPadding = getPaddingBottom(); + // Check on the id of the child before adding it. + if (child != null && child.getId() != com.android.internal.R.id.default_preference_layout) { + // Add the padding to the view group after determining if the padding already exists. + if (!mPaddingApplied) { + topPadding += mTopPadding; + bottomPadding += mBottomPadding; + mPaddingApplied = true; + } + } else { + if (mPaddingApplied) { + topPadding -= mTopPadding; + bottomPadding -= mBottomPadding; + mPaddingApplied = false; + } + } + int previousTop = getPaddingTop(); + int previousBottom = getPaddingBottom(); + if (previousTop != topPadding || previousBottom != bottomPadding) { + setPadding(getPaddingLeft(), topPadding, getPaddingRight(), bottomPadding); + } + super.addView(child); + } +} \ No newline at end of file diff --git a/core/res/res/layout/preference_list_content.xml b/core/res/res/layout/preference_list_content.xml index 6c0e773d69248..0f844180c2be5 100644 --- a/core/res/res/layout/preference_list_content.xml +++ b/core/res/res/layout/preference_list_content.xml @@ -56,7 +56,7 @@ - diff --git a/core/res/res/layout/preference_list_fragment.xml b/core/res/res/layout/preference_list_fragment.xml index c499b8a0a57c9..dbe0df0c49e32 100644 --- a/core/res/res/layout/preference_list_fragment.xml +++ b/core/res/res/layout/preference_list_fragment.xml @@ -18,6 +18,7 @@ --> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 770adf5a81e02..3f81a895b9328 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -610,6 +610,9 @@ + + + @@ -2135,6 +2138,12 @@ + + + + + + diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 4aa16f9325adb..6985de6a57d8a 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -48,10 +48,15 @@ @android:drawable/popup_bottom_medium @android:drawable/popup_center_medium - + + + + diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 9215bf22c634e..1ef99d0b21391 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -262,13 +262,16 @@ @android:drawable/search_dropdown_dark + + + @android:style/Widget.PreferenceFrameLayout - + - +