Здравствуйте. В прошлом обзоре я рассмотрел лишь часть индикаторов, которые нам предоставляет библиотека. В этой статье я рассмотрю оставшийся вида индикаторов.
4. IconPageIndicator
IconPageIndicator — индикатор в виде иконок.
Для начала создадим drawable-файл:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/perm_group_calendar_selected"> <item android:drawable="@drawable/perm_group_calendar_normal"> </selector>
У нас есть два состояния: выбран и не выбран.
Код адаптера:
public class IconsAdapter extends FragmentPagerAdapter implements IconPagerAdapter { protected static final String[] CONTENT = new String[] { "This", "Is", "A", "Test", }; protected static final int[] ICONS = new int[] { R.drawable.perm_group_calendar, R.drawable.perm_group_camera, R.drawable.perm_group_device_alarms, R.drawable.perm_group_location }; public IconsAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return new TestFragment(CONTENT[position]); } @Override public int getCount() { return CONTENT.length; } @Override public CharSequence getPageTitle(int position) { return CONTENT[position]; } @Override public int getIconResId(int index) { return ICONS[index]; } }
В адаптере мы храним текст, который будет отображаться на экране. Также у нас есть массив с id drawable-ресурсов, которые мы создали ранее. В методе getItem мы каждый раз создаем новый фрагмент. Хоть это и не правильно с точки зрения экономичности, но зато очень сильно облегчает код.
Код TestFragment:
public final class TestFragment extends Fragment { private String mContent = ""; public TestFragment(String mContent) { this.mContent = mContent; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView text = new TextView(getActivity()); text.setGravity(Gravity.CENTER); text.setText(mContent); text.setTextSize(20 * getResources().getDisplayMetrics().density); text.setPadding(20, 20, 20, 20); LinearLayout layout = new LinearLayout(getActivity()); layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); layout.setGravity(Gravity.CENTER); layout.addView(text); return layout; } }
В методе onCreateView мы создаем TextView, устанавливаем ему размер текста, отступы и т. д.
Код main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.support.v4.view.ViewPager android:id="@+id/icons_default_pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"> <com.viewpagerindicator.IconPageIndicator android:id="@+id/icons_default_indicator" android:layout_height="wrap_content" android:layout_width="fill_parent"> </LinearLayout>
И код MainActivity.java:
public class MainActivity extends FragmentActivity { private IconPageIndicator mIndicator; private ViewPager viewPager; private IconsAdapter viewPagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.icons_default); viewPagerAdapter = new IconsAdapter(getSupportFragmentManager()); viewPager = (ViewPager) findViewById(R.id.icons_default_pager); viewPager.setAdapter(viewPagerAdapter); mIndicator = (IconPageIndicator)findViewById(R.id.icons_default_indicator); mIndicator.setViewPager(viewPager); } }
Обратите внимание на то, что наша Activity наследуется от FragmentActivity. Это нужно для того, чтобы вызвать метод getSupportFragmentManager()
при создании адаптера. Далее мы инициализируем ViewPager и адаптер и привязываем их. На этом все.
Библиотека на GitHub: ViewPagerIndicator.
Исходники примера: ViewPagerIndicator.