Merge "New Holo style for Tabs."
@@ -21,6 +21,7 @@ import com.android.internal.R;
|
||||
import android.app.LocalActivityManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.util.AttributeSet;
|
||||
@@ -63,6 +64,8 @@ public class TabHost extends FrameLayout implements ViewTreeObserver.OnTouchMode
|
||||
private OnTabChangeListener mOnTabChangeListener;
|
||||
private OnKeyListener mTabKeyListener;
|
||||
|
||||
private int mTabLayoutId;
|
||||
|
||||
public TabHost(Context context) {
|
||||
super(context);
|
||||
initTabHost();
|
||||
@@ -70,6 +73,18 @@ public class TabHost extends FrameLayout implements ViewTreeObserver.OnTouchMode
|
||||
|
||||
public TabHost(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
TypedArray a = context.obtainStyledAttributes(attrs,
|
||||
com.android.internal.R.styleable.TabWidget,
|
||||
com.android.internal.R.attr.tabWidgetStyle, 0);
|
||||
|
||||
mTabLayoutId = a.getResourceId(R.styleable.TabWidget_tabLayout, 0);
|
||||
if (mTabLayoutId == 0) {
|
||||
throw new IllegalArgumentException("Invalid TabWidget tabLayout id");
|
||||
}
|
||||
|
||||
a.recycle();
|
||||
|
||||
initTabHost();
|
||||
}
|
||||
|
||||
@@ -214,6 +229,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
|
||||
if (tabSpec.mIndicatorStrategy instanceof ViewIndicatorStrategy) {
|
||||
mTabWidget.setStripEnabled(false);
|
||||
}
|
||||
|
||||
mTabWidget.addView(tabIndicator);
|
||||
mTabSpecs.add(tabSpec);
|
||||
|
||||
@@ -513,7 +529,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
|
||||
final Context context = getContext();
|
||||
LayoutInflater inflater =
|
||||
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View tabIndicator = inflater.inflate(R.layout.tab_indicator,
|
||||
View tabIndicator = inflater.inflate(mTabLayoutId,
|
||||
mTabWidget, // tab widget is the parent
|
||||
false); // no inflate params
|
||||
|
||||
@@ -525,7 +541,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
|
||||
tabIndicator.setBackgroundResource(R.drawable.tab_indicator_v4);
|
||||
tv.setTextColor(context.getResources().getColorStateList(R.color.tab_indicator_text_v4));
|
||||
}
|
||||
|
||||
|
||||
return tabIndicator;
|
||||
}
|
||||
}
|
||||
@@ -547,7 +563,7 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
|
||||
final Context context = getContext();
|
||||
LayoutInflater inflater =
|
||||
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View tabIndicator = inflater.inflate(R.layout.tab_indicator,
|
||||
View tabIndicator = inflater.inflate(mTabLayoutId,
|
||||
mTabWidget, // tab widget is the parent
|
||||
false); // no inflate params
|
||||
|
||||
@@ -555,14 +571,17 @@ mTabHost.addTab(TAB_TAG_1, "Hello, world!", "Tab 1");
|
||||
tv.setText(mLabel);
|
||||
|
||||
final ImageView iconView = (ImageView) tabIndicator.findViewById(R.id.icon);
|
||||
iconView.setImageDrawable(mIcon);
|
||||
if (mIcon != null) {
|
||||
iconView.setImageDrawable(mIcon);
|
||||
iconView.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.DONUT) {
|
||||
// Donut apps get old color scheme
|
||||
tabIndicator.setBackgroundResource(R.drawable.tab_indicator_v4);
|
||||
tv.setTextColor(context.getResources().getColorStateList(R.color.tab_indicator_text_v4));
|
||||
}
|
||||
|
||||
|
||||
return tabIndicator;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,7 +120,9 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
|
||||
|
||||
final Context context = mContext;
|
||||
final Resources resources = context.getResources();
|
||||
|
||||
|
||||
// Tests the target Sdk version, as set in the Manifest. Could not be set using styles.xml
|
||||
// in a values-v? directory which targets the current platform Sdk version instead.
|
||||
if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.DONUT) {
|
||||
// Donut apps get old color scheme
|
||||
if (mLeftStrip == null) {
|
||||
@@ -131,16 +133,6 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener {
|
||||
mRightStrip = resources.getDrawable(
|
||||
com.android.internal.R.drawable.tab_bottom_right_v4);
|
||||
}
|
||||
} else {
|
||||
// Use modern color scheme for Eclair and beyond
|
||||
if (mLeftStrip == null) {
|
||||
mLeftStrip = resources.getDrawable(
|
||||
com.android.internal.R.drawable.tab_bottom_left);
|
||||
}
|
||||
if (mRightStrip == null) {
|
||||
mRightStrip = resources.getDrawable(
|
||||
com.android.internal.R.drawable.tab_bottom_right);
|
||||
}
|
||||
}
|
||||
|
||||
// Deal with focus, as we don't want the focus to go by default
|
||||
|
||||
@@ -7142,6 +7142,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
case Gravity.RIGHT:
|
||||
return 0.0f;
|
||||
case Gravity.CENTER_HORIZONTAL:
|
||||
case Gravity.FILL_HORIZONTAL:
|
||||
return (mLayout.getLineWidth(0) - ((mRight - mLeft) -
|
||||
getCompoundPaddingLeft() - getCompoundPaddingRight())) /
|
||||
getHorizontalFadingEdgeLength();
|
||||
|
||||
|
Before Width: | Height: | Size: 597 B |
|
Before Width: | Height: | Size: 728 B |
|
Before Width: | Height: | Size: 581 B |
|
Before Width: | Height: | Size: 707 B |
BIN
core/res/res/drawable-hdpi/tab_bottom_holo.9.png
Normal file
|
After Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 296 B |
|
Before Width: | Height: | Size: 306 B |
BIN
core/res/res/drawable-hdpi/tab_selected_focused_holo.9.png
Normal file
|
After Width: | Height: | Size: 218 B |
BIN
core/res/res/drawable-hdpi/tab_selected_holo.9.png
Normal file
|
After Width: | Height: | Size: 159 B |
|
After Width: | Height: | Size: 522 B |
BIN
core/res/res/drawable-hdpi/tab_selected_pressed_holo.9.png
Normal file
|
After Width: | Height: | Size: 271 B |
|
Before Width: | Height: | Size: 234 B |
|
Before Width: | Height: | Size: 140 B |
BIN
core/res/res/drawable-hdpi/tab_unselected_focused_holo.9.png
Normal file
|
After Width: | Height: | Size: 216 B |
BIN
core/res/res/drawable-hdpi/tab_unselected_holo.9.png
Normal file
|
After Width: | Height: | Size: 147 B |
|
After Width: | Height: | Size: 536 B |
BIN
core/res/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
Normal file
|
After Width: | Height: | Size: 265 B |
|
Before Width: | Height: | Size: 463 B |
|
Before Width: | Height: | Size: 554 B |
|
Before Width: | Height: | Size: 465 B |
|
Before Width: | Height: | Size: 554 B |
BIN
core/res/res/drawable-mdpi/tab_bottom_holo.9.png
Normal file
|
After Width: | Height: | Size: 145 B |
|
Before Width: | Height: | Size: 289 B |
|
Before Width: | Height: | Size: 300 B |
BIN
core/res/res/drawable-mdpi/tab_focused_holo.9.png
Normal file
|
After Width: | Height: | Size: 634 B |
BIN
core/res/res/drawable-mdpi/tab_pressed_holo.9.png
Normal file
|
After Width: | Height: | Size: 328 B |
BIN
core/res/res/drawable-mdpi/tab_selected_focused_holo.9.png
Normal file
|
After Width: | Height: | Size: 203 B |
BIN
core/res/res/drawable-mdpi/tab_selected_holo.9.png
Normal file
|
After Width: | Height: | Size: 144 B |
|
After Width: | Height: | Size: 454 B |
BIN
core/res/res/drawable-mdpi/tab_selected_pressed_holo.9.png
Normal file
|
After Width: | Height: | Size: 231 B |
|
Before Width: | Height: | Size: 210 B |
BIN
core/res/res/drawable-mdpi/tab_unselected_focused_holo.9.png
Normal file
|
After Width: | Height: | Size: 196 B |
BIN
core/res/res/drawable-mdpi/tab_unselected_holo.9.png
Normal file
|
After Width: | Height: | Size: 128 B |
|
After Width: | Height: | Size: 459 B |
BIN
core/res/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
Normal file
|
After Width: | Height: | Size: 223 B |
@@ -16,6 +16,6 @@
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true" android:drawable="@drawable/tab_press_bar_right"/>
|
||||
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/tab_selected_bar_right"/>
|
||||
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/tab_focus_bar_right"/>
|
||||
<item android:state_focused="false" android:drawable="@drawable/tab_selected_bar_right"/>
|
||||
<item android:state_focused="true" android:drawable="@drawable/tab_focus_bar_right"/>
|
||||
</selector>
|
||||
|
||||
34
core/res/res/drawable/tab_indicator_holo.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2008 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.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- Non focused states -->
|
||||
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" />
|
||||
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />
|
||||
|
||||
<!-- Focused states -->
|
||||
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" />
|
||||
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />
|
||||
|
||||
<!-- Pressed -->
|
||||
<!-- Non focused states -->
|
||||
<item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
|
||||
<item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
|
||||
|
||||
<!-- Focused states -->
|
||||
<item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_focused_holo" />
|
||||
<item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_focused_holo" />
|
||||
</selector>
|
||||
@@ -20,7 +20,6 @@
|
||||
android:layout_weight="1"
|
||||
android:layout_marginLeft="-3dip"
|
||||
android:layout_marginRight="-3dip"
|
||||
android:orientation="vertical"
|
||||
android:background="@android:drawable/tab_indicator">
|
||||
|
||||
<ImageView android:id="@+id/icon"
|
||||
|
||||
46
core/res/res/layout/tab_indicator_holo.xml
Normal file
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2008 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.
|
||||
-->
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="56dip"
|
||||
android:layout_weight="0"
|
||||
android:layout_marginLeft="0dip"
|
||||
android:layout_marginRight="0dip"
|
||||
android:background="@android:drawable/tab_indicator_holo">
|
||||
|
||||
<View android:id="@+id/tab_indicator_left_spacer"
|
||||
android:layout_width="16dip"
|
||||
android:layout_height="0dip" />
|
||||
|
||||
<ImageView android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:visibility="gone"
|
||||
android:layout_toRightOf="@id/tab_indicator_left_spacer"
|
||||
android:paddingRight="8dip" />
|
||||
|
||||
<TextView android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toRightOf="@id/icon"
|
||||
android:paddingLeft="0dip"
|
||||
android:paddingRight="16dip"
|
||||
style="?android:attr/tabWidgetStyle" />
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -2137,6 +2137,8 @@
|
||||
<attr name="tabStripLeft" format="reference" />
|
||||
<!-- Drawable used to draw the right part of the strip underneath the tabs. -->
|
||||
<attr name="tabStripRight" format="reference" />
|
||||
<!-- Layout used to organize each tab's content. -->
|
||||
<attr name="tabLayout" format="reference" />
|
||||
</declare-styleable>
|
||||
<declare-styleable name="TextAppearance">
|
||||
<!-- Text color. -->
|
||||
|
||||
@@ -560,6 +560,12 @@
|
||||
<item name="android:textAppearance">@style/TextAppearance.Widget.TabWidget</item>
|
||||
<item name="ellipsize">marquee</item>
|
||||
<item name="singleLine">true</item>
|
||||
<item name="android:tabStripLeft">@android:drawable/tab_bottom_left</item>
|
||||
<item name="android:tabStripRight">@android:drawable/tab_bottom_right</item>
|
||||
<item name="android:tabStripEnabled">true</item>
|
||||
<item name="android:divider">@null</item>
|
||||
<item name="android:gravity">fill_horizontal|center_vertical</item>
|
||||
<item name="android:tabLayout">@android:layout/tab_indicator</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Gallery">
|
||||
@@ -1070,7 +1076,7 @@
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Holo.Widget.TabWidget">
|
||||
<item name="android:textSize">14sp</item>
|
||||
<item name="android:textSize">18sp</item>
|
||||
<item name="android:textStyle">normal</item>
|
||||
<item name="android:textColor">@android:color/tab_indicator_text</item>
|
||||
</style>
|
||||
@@ -1421,6 +1427,13 @@
|
||||
</style>
|
||||
|
||||
<style name="Widget.Holo.TabWidget" parent="Widget.TabWidget">
|
||||
<item name="android:textAppearance">@style/TextAppearance.Holo.Widget.TabWidget</item>
|
||||
<item name="android:tabStripLeft">@null</item>
|
||||
<item name="android:tabStripRight">@null</item>
|
||||
<item name="android:tabStripEnabled">false</item>
|
||||
<item name="android:divider">@null</item>
|
||||
<item name="android:gravity">left|center_vertical</item>
|
||||
<item name="android:tabLayout">@android:layout/tab_indicator_holo</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Holo.WebTextView" parent="Widget.WebTextView">
|
||||
@@ -1693,7 +1706,7 @@
|
||||
<style name="Widget.Holo.Light.CompoundButton.Star" parent="Widget.CompoundButton.Star">
|
||||
</style>
|
||||
|
||||
<style name="Widget.Holo.Light.TabWidget" parent="Widget.TabWidget">
|
||||
<style name="Widget.Holo.Light.TabWidget" parent="Widget.Holo.TabWidget">
|
||||
</style>
|
||||
|
||||
<style name="Widget.Holo.Light.WebTextView" parent="Widget.WebTextView">
|
||||
|
||||