Сьогодні поговоримо про TabLayout.
TabLayout забезпечує можливість створення горизонтальних вкладок.
КРОК 1: ПІДКЛЮЧЕННЯ БІБЛІОТЕКИ ДО ПРОЕКТУ
Перш за все, ми маємо додати бібліотеку до файлу
gradle для нашого проекту.
dependencies {
compile 'com.android.support:design:22.2.0'
}
- dependencies {
- compile 'com.android.support:design:22.2.0'
- }
dependencies {
compile 'com.android.support:design:22.2.0'
}
КРОК 2: ДОДАЄМО КОЛЬОРИ ТА КОНСТАНТНИЙ ТЕКСТ В ПРОЕКТ
У цьому проекту будуть статичні кольори та рядки. Найкращий спосіб зберігати ці дані в файлах strings.xml та
colors.xml.
Для початку створимо colors.xml в каталозі
res/values/. Вихідний код файлу зображено нижче:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primaryColor">#2196F3</color>
<color name="primaryColorDark">#1976D2</color>
<color name="cyan">#00BCD4</color>
<color name="teal">#009688</color>
<color name="amber">#FFC107</color>
</resources>
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <color name="primaryColor">#2196F3</color>
- <color name="primaryColorDark">#1976D2</color>
- <color name="cyan">#00BCD4</color>
- <color name="teal">#009688</color>
- <color name="amber">#FFC107</color>
- </resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primaryColor">#2196F3</color>
<color name="primaryColorDark">#1976D2</color>
<color name="cyan">#00BCD4</color>
<color name="teal">#009688</color>
<color name="amber">#FFC107</color>
</resources>
Далі оновимо файл
strings.xml, що знаходиться в каталозі
/res/values/. Додамо 3 текстові константи.
<string name="first">First</string>
<string name="second">Second</string>
<string name="third">Third</string>
- <string name="first">First</string>
- <string name="second">Second</string>
- <string name="third">Third</string>
<string name="first">First</string>
<string name="second">Second</string>
<string name="third">Third</string>
КРОК 3: ОНОВИМО ТЕМУ ПРОЕКТУ
Зараз ми оновимо тему всього додатку. Ви можете знайти тему в файлі
styles.xml, що знаходиться за адресою
/res/values/.
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryDark">@color/primaryColorDark</item>
<item name="colorAccent">@android:color/white</item>
</style>
</resources>
- <resources>
- <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
- <item name="colorPrimary">@color/primaryColor</item>
- <item name="colorPrimaryDark">@color/primaryColorDark</item>
- <item name="colorAccent">@android:color/white</item>
- </style>
- </resources>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryDark">@color/primaryColorDark</item>
<item name="colorAccent">@android:color/white</item>
</style>
</resources>
КРОК 4: ОНОВЛЕННЯ LAYOUT ДЛЯ ACTIVITY
Activity в додатку показує toolbar, вклаку tab та fragment. Layout викликає
activity_main.xml, що лежить в каталозі
res/layouts/.
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
- <android.support.design.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <android.support.design.widget.AppBarLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="?attr/actionBarSize"
- android:background="?attr/colorPrimary"
- app:layout_scrollFlags="scroll|enterAlways"
- app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
- <android.support.design.widget.TabLayout
- android:id="@+id/tabLayout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </android.support.design.widget.AppBarLayout>
- <android.support.v4.view.ViewPager
- android:id="@+id/viewPager"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:layout_behavior="@string/appbar_scrolling_view_behavior" />
- </android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Також ви можете мати різний стиль для ваших вкладок. Для цього ви можете змінити властивості
tabMode та
tabGravity.
КРОК 5: ОНОВЛЕННЯ ACTIVITY
Ми маємо оновити наше activity та створити необхідні вкладки(tabs). Для кожної вкладки ми створимо фрагмент. Будемо використовувати майже той самий фрагмент. Кожен фрагмент буде містити в собі різний колір та текст. Вихідний код актівіті.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
TabLayout mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
ViewPager mViewPager = (ViewPager) findViewById(R.id.viewPager);
setSupportActionBar(mToolbar);
setupViewPager(mViewPager);
mTabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.add(getResources().getString(R.string.first), getResources().getColor(R.color.cyan));
adapter.add(getResources().getString(R.string.second), getResources().getColor(R.color.teal));
adapter.add(getResources().getString(R.string.third), getResources().getColor(R.color.amber));
viewPager.setAdapter(adapter);
}
}
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
- TabLayout mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
- ViewPager mViewPager = (ViewPager) findViewById(R.id.viewPager);
- setSupportActionBar(mToolbar);
- setupViewPager(mViewPager);
- mTabLayout.setupWithViewPager(mViewPager);
- }
- private void setupViewPager(ViewPager viewPager) {
- ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
- adapter.add(getResources().getString(R.string.first), getResources().getColor(R.color.cyan));
- adapter.add(getResources().getString(R.string.second), getResources().getColor(R.color.teal));
- adapter.add(getResources().getString(R.string.third), getResources().getColor(R.color.amber));
- viewPager.setAdapter(adapter);
- }
- }
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
TabLayout mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
ViewPager mViewPager = (ViewPager) findViewById(R.id.viewPager);
setSupportActionBar(mToolbar);
setupViewPager(mViewPager);
mTabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.add(getResources().getString(R.string.first), getResources().getColor(R.color.cyan));
adapter.add(getResources().getString(R.string.second), getResources().getColor(R.color.teal));
adapter.add(getResources().getString(R.string.third), getResources().getColor(R.color.amber));
viewPager.setAdapter(adapter);
}
}
КРОК 6: СТВОРЮЄМО АДАПТЕР ДЛЯ ФРАГМЕНТА
Необхідно створити адаптер для додатку. Цей адаптер буде зберігати інформацію про фрагменти та їх заголовки.
static class ViewPagerAdapter extends FragmentPagerAdapter {
private List mFragmentList = new ArrayList<>();
private List mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void add(String title, int color) {
Fragment fragment = DummyFragment.newInstance(title, color);
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
- static class ViewPagerAdapter extends FragmentPagerAdapter {
- private List<fragment> mFragmentList = new ArrayList<>();
- private List<string> mFragmentTitleList = new ArrayList<>();
- public ViewPagerAdapter(FragmentManager manager) {
- super(manager);
- }
- @Override
- public Fragment getItem(int position) {
- return mFragmentList.get(position);
- }
- @Override
- public int getCount() {
- return mFragmentList.size();
- }
- public void add(String title, int color) {
- Fragment fragment = DummyFragment.newInstance(title, color);
- mFragmentList.add(fragment);
- mFragmentTitleList.add(title);
- }
- @Override
- public CharSequence getPageTitle(int position) {
- return mFragmentTitleList.get(position);
- }
- }
- </string></fragment>
static class ViewPagerAdapter extends FragmentPagerAdapter {
private List<fragment> mFragmentList = new ArrayList<>();
private List<string> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void add(String title, int color) {
Fragment fragment = DummyFragment.newInstance(title, color);
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
</string></fragment>
КРОК 7: ДОДАЄМО ШАР ДО ФРАГМЕНТУADD LAYOUT FOR FRAGMENT
Створюємо простий шар для фрагменту, який буде змінювати колір та текст.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frameLayout">
<TextView
android:id="@+id/textView"
android:text="item"
android:textSize="36sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/frameLayout">
- <TextView
- android:id="@+id/textView"
- android:text="item"
- android:textSize="36sp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center" />
- </FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frameLayout">
<TextView
android:id="@+id/textView"
android:text="item"
android:textSize="36sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
КРОК 8: ОНОВЛЕННЯ FRAGMENT
Нарешті ми оновлюємо фрагмент .
public static class DummyFragment extends Fragment {
public static final String COLOR = "color";
public static final String TEXT = "text";
public static Fragment newInstance(String text, int color) {
DummyFragment f = new DummyFragment();
Bundle args = new Bundle();
args.putInt(COLOR, color);
args.putString(TEXT, text);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.frameLayout);
TextView textView = (TextView) view.findViewById(R.id.textView);
frameLayout.setBackgroundColor(getArguments().getInt(COLOR));
textView.setText(getArguments().getString(TEXT));
return view;
}
}
- public static class DummyFragment extends Fragment {
- public static final String COLOR = "color";
- public static final String TEXT = "text";
- public static Fragment newInstance(String text, int color) {
- DummyFragment f = new DummyFragment();
- Bundle args = new Bundle();
- args.putInt(COLOR, color);
- args.putString(TEXT, text);
- f.setArguments(args);
- return f;
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment, container, false);
- FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.frameLayout);
- TextView textView = (TextView) view.findViewById(R.id.textView);
- frameLayout.setBackgroundColor(getArguments().getInt(COLOR));
- textView.setText(getArguments().getString(TEXT));
- return view;
- }
- }
public static class DummyFragment extends Fragment {
public static final String COLOR = "color";
public static final String TEXT = "text";
public static Fragment newInstance(String text, int color) {
DummyFragment f = new DummyFragment();
Bundle args = new Bundle();
args.putInt(COLOR, color);
args.putString(TEXT, text);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.frameLayout);
TextView textView = (TextView) view.findViewById(R.id.textView);
frameLayout.setBackgroundColor(getArguments().getInt(COLOR));
textView.setText(getArguments().getString(TEXT));
return view;
}
}
Після запуску проекту у вас буде ось такий додаток.
Цей проект можна переглянути також на
github.
Комментариев нет:
Отправить комментарий