AndroidTabLayoutWithViewPager
/
app
/
src
/
main
/
java
/
com
/
example
/
cola
/
tablayoutwithviewpager
/
MainActivity.java
package com.example.cola.tablayoutwithviewpager; | |
import android.content.Context; | |
import android.graphics.drawable.Drawable; | |
import android.support.design.widget.TabLayout; | |
import android.support.v4.app.Fragment; | |
import android.support.v4.app.FragmentManager; | |
import android.support.v4.app.FragmentPagerAdapter; | |
import android.support.v4.view.ViewPager; | |
import android.os.Bundle; | |
import android.support.v7.app.AppCompatActivity; | |
import android.text.Spannable; | |
import android.text.SpannableString; | |
import android.text.style.ImageSpan; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.widget.ImageView; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class MainActivity extends AppCompatActivity { | |
TabLayout tabLayout; | |
ViewPager viewPager; | |
PagerAdapter adapter; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
tabLayout = (TabLayout) findViewById(R.id.tab_layout); | |
viewPager = (ViewPager) findViewById(R.id.pager); | |
if (viewPager != null) { | |
setupViewPager(viewPager); | |
} | |
} | |
private void setupViewPager(ViewPager viewPager) { | |
adapter = new PagerAdapter(getSupportFragmentManager(), this); | |
adapter.addFragment(new ContentFragment().newInstance("Page1"), "Tab 1"); | |
adapter.addFragment(new ContentFragment().newInstance("Page2"), "Tab 2"); | |
adapter.addFragment(new ContentFragment().newInstance("Page3"), "Tab 3"); | |
viewPager.setAdapter(adapter); | |
tabLayout.setupWithViewPager(viewPager); | |
for (int i = 0; i < tabLayout.getTabCount(); i++) { | |
TabLayout.Tab tab = tabLayout.getTabAt(i); | |
tab.setCustomView(adapter.getTabView(i)); | |
} | |
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { | |
// This method will be invoked when a new page becomes selected. | |
@Override | |
public void onPageSelected(int position) { | |
Toast.makeText(MainActivity.this, | |
"Selected page position: " + position, Toast.LENGTH_SHORT).show(); | |
} | |
// This method will be invoked when the current page is scrolled | |
@Override | |
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { | |
// Code goes here | |
} | |
// Called when the scroll state changes: | |
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING | |
@Override | |
public void onPageScrollStateChanged(int state) { | |
// Code goes here | |
} | |
}); | |
} | |
public class PagerAdapter extends FragmentPagerAdapter { | |
private final List<Fragment> myFragments = new ArrayList<>(); | |
private final List<String> myFragmentTitles = new ArrayList<>(); | |
private Context context; | |
private int[] imageResId = { | |
R.drawable.facebook_logo_32, | |
R.drawable.instagram_logo_32, | |
R.drawable.linkedin_logo_32 | |
}; | |
private int[] customImageResId = { | |
R.drawable.facebook, | |
R.drawable.instagram, | |
R.drawable.linkedin | |
}; | |
public PagerAdapter(FragmentManager fm, Context context) { | |
super(fm); | |
this.context = context; | |
} | |
public void addFragment(Fragment fragment, String title) { | |
myFragments.add(fragment); | |
myFragmentTitles.add(title); | |
} | |
@Override | |
public Fragment getItem(int position) { | |
return myFragments.get(position); | |
} | |
@Override | |
public int getCount() { | |
return myFragments.size(); | |
} | |
public View getTabView(int position) { | |
// Given you have a custom layout in `res/layout/custom_tab_item.xml` with a TextView and ImageView | |
View v = LayoutInflater.from(context).inflate(R.layout.custom_tab_item, null); | |
TextView tv = (TextView) v.findViewById(R.id.tab_item_txt); | |
tv.setText(myFragmentTitles.get(position)); | |
ImageView img = (ImageView) v.findViewById(R.id.tab_item_view); | |
img.setImageResource(customImageResId[position]); | |
return v; | |
} | |
@Override | |
public CharSequence getPageTitle(int position) { | |
//text only, use this | |
// return myFragmentTitles.get(position); | |
//add Tab with icon and text, use this | |
Drawable image = context.getResources().getDrawable(imageResId[position]); | |
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); | |
SpannableString sb = new SpannableString(" " + myFragmentTitles.get(position)); | |
ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); | |
sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); | |
return sb; | |
} | |
} | |
} |