Skip to content

Commit 4573560

Browse files
committed
Support icons on tab indicator.
1 parent 0643658 commit 4573560

File tree

10 files changed

+120
-46
lines changed

10 files changed

+120
-46
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Version 2.4.0 *(In Development)*
55
------------------------------
66

77
* New `IconPageIndicator`! Uses state-list images to represent pages.
8+
* `TabPageIndicator` now supports icons via `IconPagerAdapter` interface.
89
* Support `android:background` attribute on `Canvas`-based views.
910
* Title indicator allows for drawing its line, underline, and/or triangle on
1011
top of the titles for placement underneath a `ViewPager`.

library/project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99

1010
android.library=true
1111
# Project target.
12-
target=android-14
12+
target=android-16

library/src/com/viewpagerindicator/TabPageIndicator.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,17 @@ public void onDetachedFromWindow() {
149149
}
150150
}
151151

152-
private void addTab(CharSequence text, int index) {
152+
private void addTab(int index, CharSequence text, int iconResId) {
153153
final TabView tabView = new TabView(getContext());
154154
tabView.mIndex = index;
155155
tabView.setFocusable(true);
156156
tabView.setOnClickListener(mTabClickListener);
157157
tabView.setText(text);
158158

159+
if (iconResId != 0) {
160+
tabView.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0);
161+
}
162+
159163
mTabLayout.addView(tabView, new LinearLayout.LayoutParams(0, FILL_PARENT, 1));
160164
}
161165

@@ -201,13 +205,21 @@ public void setViewPager(ViewPager view) {
201205
public void notifyDataSetChanged() {
202206
mTabLayout.removeAllViews();
203207
PagerAdapter adapter = mViewPager.getAdapter();
208+
IconPagerAdapter iconAdapter = null;
209+
if (adapter instanceof IconPagerAdapter) {
210+
iconAdapter = (IconPagerAdapter)adapter;
211+
}
204212
final int count = adapter.getCount();
205213
for (int i = 0; i < count; i++) {
206214
CharSequence title = adapter.getPageTitle(i);
207215
if (title == null) {
208216
title = EMPTY_TITLE;
209217
}
210-
addTab(title, i);
218+
int iconResId = 0;
219+
if (iconAdapter != null) {
220+
iconResId = iconAdapter.getIconResId(i);
221+
}
222+
addTab(i, title, iconResId);
211223
}
212224
if (mSelectedTabIndex > count) {
213225
mSelectedTabIndex = count - 1;

pom.xml

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@
6666
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
6767

6868
<java.version>1.6</java.version>
69-
<android.version>4.0.1.2</android.version>
70-
<android.platform>14</android.platform>
69+
<android.version>4.1.1.4</android.version>
70+
<android.platform>16</android.platform>
7171
<android.support.version>r7</android.support.version>
7272

7373
<android-maven.version>3.3.0</android-maven.version>
@@ -136,19 +136,6 @@
136136
</configuration>
137137
</plugin>
138138

139-
<plugin>
140-
<groupId>org.apache.maven.plugins</groupId>
141-
<artifactId>maven-deploy-plugin</artifactId>
142-
<version>2.6</version>
143-
<dependencies>
144-
<dependency>
145-
<groupId>org.apache.maven.wagon</groupId>
146-
<artifactId>wagon-ssh</artifactId>
147-
<version>1.0-beta-7</version>
148-
</dependency>
149-
</dependencies>
150-
</plugin>
151-
152139
<plugin>
153140
<groupId>org.apache.maven.plugins</groupId>
154141
<artifactId>maven-eclipse-plugin</artifactId>

sample/AndroidManifest.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<uses-sdk
88
android:minSdkVersion="4"
9-
android:targetSdkVersion="15" />
9+
android:targetSdkVersion="16" />
1010

1111
<application
1212
android:label="ViewPagerIndicator Sample"
@@ -237,6 +237,15 @@
237237
<category android:name="com.jakewharton.android.viewpagerindicator.sample.SAMPLE" />
238238
</intent-filter>
239239
</activity>
240+
<activity
241+
android:name=".SampleTabsWithIcons"
242+
android:label="Tabs/With Icons"
243+
android:theme="@style/StyledIndicators">
244+
<intent-filter>
245+
<action android:name="android.intent.action.MAIN" />
246+
<category android:name="com.jakewharton.android.viewpagerindicator.sample.SAMPLE" />
247+
</intent-filter>
248+
</activity>
240249

241250

242251

sample/project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
# project structure.
99

1010
# Project target.
11-
target=android-14
11+
target=android-16
1212
android.library.reference.1=../library

sample/res/values/styles.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,12 @@
5353
<item name="android:background">@drawable/custom_tab_indicator</item>
5454
<item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>
5555
<item name="android:textColor">#FF555555</item>
56-
<item name="android:textSize">18sp</item>
56+
<item name="android:textSize">16sp</item>
5757
<item name="android:divider">@drawable/custom_tab_indicator_divider</item>
58-
<item name="android:dividerPadding">8dp</item>
58+
<item name="android:dividerPadding">10dp</item>
5959
<item name="android:showDividers">middle</item>
60+
<item name="android:paddingLeft">8dp</item>
61+
<item name="android:paddingRight">8dp</item>
6062
</style>
6163

6264
<style name="CustomTabPageIndicator.Text" parent="android:TextAppearance.Medium">

sample/src/com/viewpagerindicator/sample/SampleTabsDefault.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,47 @@
22

33
import android.os.Bundle;
44
import android.support.v4.app.Fragment;
5+
import android.support.v4.app.FragmentActivity;
56
import android.support.v4.app.FragmentManager;
7+
import android.support.v4.app.FragmentPagerAdapter;
68
import android.support.v4.view.ViewPager;
79
import com.viewpagerindicator.TabPageIndicator;
810

9-
public class SampleTabsDefault extends BaseSampleActivity {
11+
public class SampleTabsDefault extends FragmentActivity {
1012
private static final String[] CONTENT = new String[] { "Recent", "Artists", "Albums", "Songs", "Playlists", "Genres" };
1113

1214
@Override
1315
protected void onCreate(Bundle savedInstanceState) {
1416
super.onCreate(savedInstanceState);
1517
setContentView(R.layout.simple_tabs);
1618

17-
mAdapter = new GoogleMusicAdapter(getSupportFragmentManager());
19+
FragmentPagerAdapter adapter = new GoogleMusicAdapter(getSupportFragmentManager());
1820

19-
mPager = (ViewPager)findViewById(R.id.pager);
20-
mPager.setAdapter(mAdapter);
21+
ViewPager pager = (ViewPager)findViewById(R.id.pager);
22+
pager.setAdapter(adapter);
2123

22-
mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
23-
mIndicator.setViewPager(mPager);
24+
TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
25+
indicator.setViewPager(pager);
2426
}
2527

26-
class GoogleMusicAdapter extends TestFragmentAdapter {
28+
class GoogleMusicAdapter extends FragmentPagerAdapter {
2729
public GoogleMusicAdapter(FragmentManager fm) {
2830
super(fm);
2931
}
3032

3133
@Override
3234
public Fragment getItem(int position) {
33-
return TestFragment.newInstance(SampleTabsDefault.CONTENT[position % SampleTabsDefault.CONTENT.length]);
35+
return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
3436
}
3537

3638
@Override
37-
public int getCount() {
38-
return SampleTabsDefault.CONTENT.length;
39+
public CharSequence getPageTitle(int position) {
40+
return CONTENT[position % CONTENT.length].toUpperCase();
3941
}
4042

4143
@Override
42-
public CharSequence getPageTitle(int position) {
43-
return SampleTabsDefault.CONTENT[position % SampleTabsDefault.CONTENT.length].toUpperCase();
44+
public int getCount() {
45+
return CONTENT.length;
4446
}
4547
}
4648
}

sample/src/com/viewpagerindicator/sample/SampleTabsStyled.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,47 @@
22

33
import android.os.Bundle;
44
import android.support.v4.app.Fragment;
5+
import android.support.v4.app.FragmentActivity;
56
import android.support.v4.app.FragmentManager;
7+
import android.support.v4.app.FragmentPagerAdapter;
68
import android.support.v4.view.ViewPager;
79
import com.viewpagerindicator.TabPageIndicator;
810

9-
public class SampleTabsStyled extends BaseSampleActivity {
11+
public class SampleTabsStyled extends FragmentActivity {
1012
private static final String[] CONTENT = new String[] { "Recent", "Artists", "Albums", "Songs", "Playlists", "Genres" };
1113

1214
@Override
1315
protected void onCreate(Bundle savedInstanceState) {
1416
super.onCreate(savedInstanceState);
1517
setContentView(R.layout.simple_tabs);
1618

17-
mAdapter = new GoogleMusicAdapter(getSupportFragmentManager());
19+
FragmentPagerAdapter adapter = new GoogleMusicAdapter(getSupportFragmentManager());
1820

19-
mPager = (ViewPager)findViewById(R.id.pager);
20-
mPager.setAdapter(mAdapter);
21+
ViewPager pager = (ViewPager)findViewById(R.id.pager);
22+
pager.setAdapter(adapter);
2123

22-
mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
23-
mIndicator.setViewPager(mPager);
24+
TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
25+
indicator.setViewPager(pager);
2426
}
2527

26-
class GoogleMusicAdapter extends TestFragmentAdapter {
28+
class GoogleMusicAdapter extends FragmentPagerAdapter {
2729
public GoogleMusicAdapter(FragmentManager fm) {
2830
super(fm);
2931
}
3032

3133
@Override
3234
public Fragment getItem(int position) {
33-
return TestFragment.newInstance(SampleTabsStyled.CONTENT[position % SampleTabsStyled.CONTENT.length]);
35+
return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
3436
}
3537

3638
@Override
37-
public int getCount() {
38-
return SampleTabsStyled.CONTENT.length;
39+
public CharSequence getPageTitle(int position) {
40+
return CONTENT[position % CONTENT.length].toUpperCase();
3941
}
4042

4143
@Override
42-
public CharSequence getPageTitle(int position) {
43-
return SampleTabsStyled.CONTENT[position % SampleTabsStyled.CONTENT.length].toUpperCase();
44+
public int getCount() {
45+
return CONTENT.length;
4446
}
4547
}
4648
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.viewpagerindicator.sample;
2+
3+
import android.os.Bundle;
4+
import android.support.v4.app.Fragment;
5+
import android.support.v4.app.FragmentActivity;
6+
import android.support.v4.app.FragmentManager;
7+
import android.support.v4.app.FragmentPagerAdapter;
8+
import android.support.v4.view.ViewPager;
9+
import com.viewpagerindicator.IconPagerAdapter;
10+
import com.viewpagerindicator.TabPageIndicator;
11+
12+
public class SampleTabsWithIcons extends FragmentActivity {
13+
private static final String[] CONTENT = new String[] { "Calendar", "Camera", "Alarms", "Location" };
14+
private static final int[] ICONS = new int[] {
15+
R.drawable.perm_group_calendar,
16+
R.drawable.perm_group_camera,
17+
R.drawable.perm_group_device_alarms,
18+
R.drawable.perm_group_location,
19+
};
20+
21+
@Override
22+
protected void onCreate(Bundle savedInstanceState) {
23+
super.onCreate(savedInstanceState);
24+
setContentView(R.layout.simple_tabs);
25+
26+
FragmentPagerAdapter adapter = new GoogleMusicAdapter(getSupportFragmentManager());
27+
28+
ViewPager pager = (ViewPager)findViewById(R.id.pager);
29+
pager.setAdapter(adapter);
30+
31+
TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
32+
indicator.setViewPager(pager);
33+
}
34+
35+
class GoogleMusicAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
36+
public GoogleMusicAdapter(FragmentManager fm) {
37+
super(fm);
38+
}
39+
40+
@Override
41+
public Fragment getItem(int position) {
42+
return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
43+
}
44+
45+
@Override
46+
public CharSequence getPageTitle(int position) {
47+
return CONTENT[position % CONTENT.length].toUpperCase();
48+
}
49+
50+
@Override public int getIconResId(int index) {
51+
return ICONS[index];
52+
}
53+
54+
@Override
55+
public int getCount() {
56+
return CONTENT.length;
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)