Текст книги "Разработка Android-приложений в деталях"
Автор книги: Тимур Машнин
Жанр: Компьютеры: прочее, Компьютеры
Возрастные ограничения: +12
сообщить о неприемлемом содержимом
Текущая страница: 8 (всего у книги 20 страниц)
ViewPager
Для создания галереи изображений с помощью ViewPager-компонента, в главном Activity-компоненте приложения также определим показ начальной заставки и панели с кнопками переключения между разделами контента:
import java.io.IOException;
import java.io.InputStream;
import java. util. Locale;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.graphics. drawable. Drawable;
import android. os. Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View. OnClickListener;
import android. widget. Button;
import android.widget.ImageView;
public class MainActivity extends FragmentActivity implements
ActionBar. TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar ();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter (
getSupportFragmentManager ());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter (mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener (new ViewPager.SimpleOnPageChangeListener () {
@Override
public void onPageSelected (int position) {
actionBar.setSelectedNavigationItem (position);
}
});
for (int i = 0; i <mSectionsPagerAdapter.getCount (); i++) {
actionBar.addTab(actionBar.newTab ()
.setText(mSectionsPagerAdapter.getPageTitle (i))
.setTabListener (this));
}}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item) {
switch (item.getItemId ()) {
case R.id.action_settings:
final Intent intent = new Intent (this, MainActivity.class);
startActivity (intent);
return true;
default:
return super. onOptionsItemSelected (item);
}}
@Override
public void onTabSelected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition ());
}
@Override
public void onTabUnselected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter (FragmentManager fm) {
super (fm);
}
@Override
public Fragment getItem (int position) {
Fragment fragment = new DummySectionFragment ();
Bundle args = new Bundle ();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position +1);
fragment.setArguments (args);
return fragment;
}
@Override
public int getCount () {
return 2;
}
@Override
public CharSequence getPageTitle (int position) {
Locale l = Locale.getDefault ();
switch (position) {
case 0:
return getString(R.string.title_main_section1).toUpperCase (l);
case 1:
return getString(R.string.title_main_section2).toUpperCase (l);
}
return null;
}}
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = «section_number»;
public DummySectionFragment () {
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int pos=getArguments().getInt (ARG_SECTION_NUMBER);
View rootView=null;
if (pos==1) {
rootView = inflater.inflate(R.layout.activity_main_launch, container, false);
ImageView image = (ImageView)rootView.findViewById(R.id.imageViewLaunch);
try
{
InputStream ims = rootView.getContext().getAssets().open("_FRONT.jpg»);
Drawable d = Drawable.createFromStream (ims, null);
image.setImageDrawable (d);
}
catch (IOException ex)
{
ex.printStackTrace ();
}}
if (pos==2) {
rootView = inflater.inflate(R.layout.contents, container, false);
final Intent intent = new Intent (getActivity (), ContentActivity.class);
final Button btn1= (Button)rootView.findViewById(R.id.button1);
btn1.setOnClickListener (new OnClickListener () {
public void onClick (View v) {
String nameTitle=«title»;
String valueTitle=btn1.getText().toString ();
intent. putExtra (nameTitle, valueTitle);
String namePages=«pages»;
int valuePages=8;
intent. putExtra (namePages, valuePages);
startActivity (intent);
}
});
final Button btnn= (Button)rootView.findViewById(R.id.buttonn);
btnn.setOnClickListener (new OnClickListener () {
public void onClick (View v) {
String nameTitle=«title»;
String valueTitle=btnn.getText().toString ();
intent. putExtra (nameTitle, valueTitle);
String namePages=«pages»;
int valuePages=xxx;
intent. putExtra (namePages, valuePages);
startActivity (intent);
}
});
}
return rootView;
}}}
В классе MainActivity в методе onCreate () создается экран, содержимое которого определяется компоновкой activity_main. xml:
http://schemas.android.com/apk/res/android"ewPager xmlns: android="<android.support.v4.view.Vi
xmlns: tools="http://schemas.android.com/tools"
android: id="@+id/pager»
android: layout_width=«match_parent»
android: layout_height=«match_parent»
tools:context=".MainActivity» />
SectionsPagerAdapter-адаптер ViewPager-компонента создает объекты android.support.v4.app.Fragment, метод onCreateView () класса которых получает в качестве параметра номер экрана, на основе которого формирует отображаемый контент.
Если пользователь переключается на первый экран – загружается компоновка activity_main_launch. xml и отображается начальная заставка:
<LinearLayout xmlns: android="http://schemas.android.com/apk/res/android"
android: id="@+id/viewLaunch»
android: orientation=«vertical»
xmlns: tools="http://schemas.android.com/tools"
android: layout_width=«match_parent»
android: layout_height=«match_parent»
android: paddingBottom="@dimen/activity_vertical_margin»
android: paddingLeft="@dimen/activity_horizontal_margin»
android: paddingRight="@dimen/activity_horizontal_margin»
android: paddingTop="@dimen/activity_vertical_margin»
tools:context=".MainActivity»>
<ImageView
android: id="@+id/imageViewLaunch»
android: layout_width=«fill_parent»
android: layout_height=«fill_parent»
android: contentDescription="@string/desc» />
</LinearLayout>
Если же пользователь переключается на второй экран – загружается компоновка contents. xml и отображается панель с кнопками переключения между разделами контента:
<?xml version=«1.0» encoding=«utf-8»? >
<ScrollView xmlns: android="http://schemas.android.com/apk/res/android"
android: layout_width=«match_parent»
android: layout_height=«match_parent»>
<LinearLayout android: layout_width=«fill_parent»
android: baselineAligned=«false»
android: layout_height=«wrap_content»
android: orientation=«horizontal»>
<LinearLayout android: layout_height=«wrap_content»
android: id="@+id/linearLayout1»
android: orientation=«vertical»
android: layout_width=«0dip»
android: layout_weight=». 8»>
<TextView
android: id="@+id/contentsTitle»
android: layout_width=«fill_parent»
android: layout_height=«wrap_content»
android: text="@string/title»
android: textStyle=«bold»
android: textAppearance=»? android: attr/textAppearanceMedium»/>
<Button
android: gravity=«left|center_vertical»
android: id="@+id/button1»
android: layout_width=«fill_parent»
android: layout_height=«wrap_content»
android: text="@string/introduction» />
<Button
android: gravity=«left|center_vertical»
android: id="@+id/buttonn»
android: layout_width=«fill_parent»
android: layout_height=«wrap_content»
android: text="@string/chxxx» />
</LinearLayout>
<LinearLayout android: layout_width=«0dip»
android: layout_height=«wrap_content»
android: orientation=«horizontal»
android: id="@+id/linearLayout_dummy»
android: layout_weight=». 20»>
</LinearLayout>
</LinearLayout>
</ScrollView>
Кнопки панели разделов контента обеспечивают запуск другого Activity-компонента приложения, передавая ему в качестве параметра свой текст и количество страниц раздела, который нужно отображать:
import java.io.IOException;
import java.io.InputStream;
import java. util. Locale;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.graphics. drawable. Drawable;
import android. os. Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class ContentActivity extends FragmentActivity implements
ActionBar. TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
public static String title;
private int pages;
@Override
protected void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView(R.layout.activity_main_content);
title=this.getIntent().getStringExtra («title»);
pages=this.getIntent().getIntExtra («pages», 0);
final ActionBar actionBar = getActionBar ();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter (
getSupportFragmentManager ());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter (mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener (new ViewPager.SimpleOnPageChangeListener () {
@Override
public void onPageSelected (int position) {
actionBar.setSelectedNavigationItem (position);
}
});
for (int i = 0; i <mSectionsPagerAdapter.getCount (); i++) {
actionBar.addTab(actionBar.newTab ()
.setText(mSectionsPagerAdapter.getPageTitle (i))
.setTabListener (this));
}}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item) {
switch (item.getItemId ()) {
case R.id.action_settings:
final Intent intent = new Intent (this, MainActivity.class);
startActivity (intent);
return true;
default:
return super. onOptionsItemSelected (item);
}}
@Override
public void onTabSelected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition ());
}
@Override
public void onTabUnselected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter (FragmentManager fm) {
super (fm);
}
@Override
public Fragment getItem (int position) {
Fragment fragment = new DummySectionFragment ();
Bundle args = new Bundle ();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position +1);
fragment.setArguments (args);
return fragment;
}
@Override
public int getCount () {
return pages;
}
@Override
public CharSequence getPageTitle (int position) {
Locale l = Locale.getDefault ();
String str=title+" page: "+position;
return str.toUpperCase (l);
}}
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = «section_number»;
public DummySectionFragment () {
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int pos=getArguments().getInt (ARG_SECTION_NUMBER);
View rootView = inflater.inflate(R.layout.activity_content, container, false);
ImageView image = (ImageView)rootView.findViewById(R.id.imageViewContent);
try
{
String path=«»;
if (ContentActivity. title. equals («Introduction»)) path=«intro»;
if (ContentActivity. title. equals («Chaptern»)) path=«chn»;
InputStream ims = rootView.getContext().getAssets().open(path+"/"+pos+".jpg»);
Drawable d = Drawable.createFromStream (ims, null);
image.setImageDrawable (d);
}
catch (IOException ex)
{
ex.printStackTrace ();
}
return rootView;
}}}
В классе ContentActivity в методе onCreate () создается экран, содержимое которого определяется компоновкой activity_main_content. xml:
http://schemas.android.com/apk/res/android"ewPager xmlns: android="<android.support.v4.view.Vi
xmlns: tools="http://schemas.android.com/tools"
android: id="@+id/pager»
android: layout_width=«match_parent»
android: layout_height=«match_parent»
tools:context=".ContentActivity» />
SectionsPagerAdapter-адаптер ViewPager-компонента создает объекты android.support.v4.app.Fragment, метод onCreateView () класса которых получает в качестве параметра номер экрана, на основе которого формируется отображаемый контент. При этом содержимое экрана определяется компоновкой activity_content. xml:
<LinearLayout xmlns: android="http://schemas.android.com/apk/res/android"
xmlns: tools="http://schemas.android.com/tools"
android: id="@+id/layoutContent»
android: layout_width=«match_parent»
android: layout_height=«match_parent»
android: orientation=«vertical»
android: paddingBottom="@dimen/activity_vertical_margin»
android: paddingLeft="@dimen/activity_horizontal_margin»
android: paddingRight="@dimen/activity_horizontal_margin»
android: paddingTop="@dimen/activity_vertical_margin»
tools:context=".ContentActivity»>
<ImageView
android: id="@+id/imageViewContent»
android: layout_width=«fill_parent»
android: layout_height=«fill_parent»
android: contentDescription="@string/cont»/>
</LinearLayout>
В методе onCreateView () класса DummySectionFragment динамически изменяется содержимое компонента ImageView на основе названия раздела контента и номера экрана, обеспечивая переключение между изображениями соответствующей папки каталога assets проекта приложения.
ImageView + Zoom + Scroll
Стандартный компонент ImageView платформы Android не позволяет прикосновением к экрану увеличить изображение и после этого прокручивать его.
Для добавления опции увеличения и прокручивания изображения можно воспользоваться сторонними библиотеками, такими как https://github.com/chrisbanes/PhotoView.
Для использования библиотеки PhotoView скачаем проект и с помощью инструмента Maven соберем JAR-файл библиотеки, который поместим в каталог libs проекта приложения.
Теперь в исходном коде приложения ImageView-компонент можно добавить в контейнер uk.co.senab.photoview.PhotoViewAttacher, который будет обеспечивать увеличение и прокрутку изображения:
private PhotoViewAttacher mAttacher;
private ImageView image;
image=(ImageView)findViewById(R.id.imageViewContent);
mAttacher = new PhotoViewAttacher (image);
image.setImageDrawable (d);
mAttacher. update ();
Галерея HTML контента
Простое поэкранное отображение HTML-контента можно организовать с помощью компонента android. webkit. WebView и слушателя setOnTouchListener () контейнера WebView-компонента. Более сложную анимацию добавит компонент android.widget.ViewFlipper, а более удобное переключение между экранами – компонент android.support.v4.view.ViewPager.
Для создания галереи HTML-контента с помощью ViewPager-компонента, в главном Activity-компоненте приложения определим показ начальной заставки и панели с кнопками переключения между разделами контента:
import java.io.IOException;
import java.io.InputStream;
import java. util. Locale;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.graphics. drawable. Drawable;
import android. os. Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View. OnClickListener;
import android.view.ViewGroup;
import android. widget. Button;
import android.widget.ImageView;
public class MainActivity extends FragmentActivity implements ActionBar. TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar ();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter (getSupportFragmentManager ());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter (mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener (new ViewPager.SimpleOnPageChangeListener () {
@Override
public void onPageSelected (int position) {
actionBar.setSelectedNavigationItem (position);
}
});
for (int i = 0; i <mSectionsPagerAdapter.getCount (); i++) {
actionBar.addTab (
actionBar.newTab ()
.setText(mSectionsPagerAdapter.getPageTitle (i))
.setTabListener (this));
}}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onTabSelected (ActionBar. Tab tab, FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition ());
}
@Override
public void onTabUnselected (ActionBar. Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected (ActionBar. Tab tab, FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter (FragmentManager fm) {
super (fm);
}
@Override
public Fragment getItem (int position) {
Fragment fragment = new DummySectionFragment ();
Bundle args = new Bundle ();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position +1);
fragment.setArguments (args);
return fragment;
}
@Override
public int getCount () {
return 2;
}
@Override
public CharSequence getPageTitle (int position) {
Locale l = Locale.getDefault ();
switch (position) {
case 0:
return getString(R.string.title_main_section1).toUpperCase (l);
case 1:
return getString(R.string.title_main_section2).toUpperCase (l);
}
return null;
}}
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = «section_number»;
public DummySectionFragment () {
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int pos=getArguments().getInt (ARG_SECTION_NUMBER);
View rootView=null;
if (pos==1) {
rootView = inflater.inflate(R.layout.activity_main_launch, container, false);
ImageView image = (ImageView)rootView.findViewById(R.id.imageViewLaunch);
try
{
InputStream ims = rootView.getContext().getAssets().open("_FRONT.jpg»);
Drawable d = Drawable.createFromStream (ims, null);
image.setImageDrawable (d);
}
catch (IOException ex)
{
ex.printStackTrace ();
}}
if (pos==2) {
rootView = inflater.inflate(R.layout.contents, container, false);
final Intent intent = new Intent (getActivity (), ContentActivity.class);
final Button btn1= (Button)rootView.findViewById(R.id.button1);
btn1.setOnClickListener (new OnClickListener () {
public void onClick (View v) {
String name=«position»;
int value=0;
intent. putExtra (name, value);
startActivity (intent);
}
});
final Button btnn= (Button)rootView.findViewById(R.id.buttonn);
btnn.setOnClickListener (new OnClickListener () {
public void onClick (View v) {
String name=«position»;
int value=xxx;
intent. putExtra (name, value);
startActivity (intent);
}
});
}
return rootView;
}}}
В классе MainActivity в методе onCreate () создается экран, содержимое которого определяется компоновкой activity_main. xml:
http://schemas.android.com/apk/res/android"ewPager xmlns: android="<android.support.v4.view.Vi
xmlns: tools="http://schemas.android.com/tools"
android: id="@+id/pager»
android: layout_width=«match_parent»
android: layout_height=«match_parent»
tools:context=".MainActivity» />
SectionsPagerAdapter-адаптер ViewPager-компонента создает объекты android.support.v4.app.Fragment, метод onCreateView () класса которых получает в качестве параметра номер экрана, на основе которого формирует отображаемый контент.
Если пользователь переключается на первый экран – загружается компоновка activity_main_launch. xml и отображается начальная заставка:
<LinearLayout xmlns: android="http://schemas.android.com/apk/res/android"
android: id="@+id/viewLaunch»
android: orientation=«vertical»
xmlns: tools="http://schemas.android.com/tools"
android: layout_width=«match_parent»
android: layout_height=«match_parent»
android: paddingBottom="@dimen/activity_vertical_margin»
android: paddingLeft="@dimen/activity_horizontal_margin»
android: paddingRight="@dimen/activity_horizontal_margin»
android: paddingTop="@dimen/activity_vertical_margin»
tools:context=".MainActivity»>
<ImageView
android: id="@+id/imageViewLaunch»
android: layout_width=«fill_parent»
android: layout_height=«fill_parent»
android: contentDescription="@string/desc» />
</LinearLayout>
Если же пользователь переключается на второй экран – загружается компоновка contents. xml и отображается панель с кнопками переключения между разделами контента:
<?xml version=«1.0» encoding=«utf-8»? >
<ScrollView xmlns: android="http://schemas.android.com/apk/res/android"
android: layout_width=«match_parent»
android: layout_height=«match_parent»>
<LinearLayout android: layout_width=«fill_parent»
android: baselineAligned=«false»
android: layout_height=«wrap_content»
android: orientation=«horizontal»>
<LinearLayout android: layout_height=«wrap_content»
android: id="@+id/linearLayout1»
android: orientation=«vertical»
android: layout_width=«0dip»
android: layout_weight=». 8»>
<TextView
android: id="@+id/contentsTitle»
android: layout_width=«fill_parent»
android: layout_height=«wrap_content»
android: text="@string/title»
android: textStyle=«bold»
android: textAppearance=»? android: attr/textAppearanceMedium»/>
<Button
android: gravity=«left|center_vertical»
android: id="@+id/button1»
android: layout_width=«fill_parent»
android: layout_height=«wrap_content»
android: text="@string/introduction» />
<Button
android: gravity=«left|center_vertical»
android: id="@+id/buttonn»
android: layout_width=«fill_parent»
android: layout_height=«wrap_content»
android: text="@string/chxxx» />
</LinearLayout>
<LinearLayout android: layout_width=«0dip»
android: layout_height=«wrap_content»
android: orientation=«horizontal»
android: id="@+id/linearLayout_dummy»
android: layout_weight=». 20»>
</LinearLayout>
</LinearLayout>
</ScrollView>
Кнопки панели разделов контента обеспечивают запуск другого компонента ContentActivity приложения, передавая ему в качестве параметра номер раздела контента, который необходимо отображать:
import java. util. Locale;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Intent;
import android. os. Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android. webkit. WebView;
public class ContentActivity extends FragmentActivity implements
ActionBar. TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
private int position;
@Override
protected void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView(R.layout.activity_main_content);
position=this.getIntent().getIntExtra («position», 0);
final ActionBar actionBar = getActionBar ();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter (
getSupportFragmentManager ());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter (mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener (new ViewPager.SimpleOnPageChangeListener () {
@Override
public void onPageSelected (int position) {
actionBar.setSelectedNavigationItem (position);
}
});
for (int i = 0; i <mSectionsPagerAdapter.getCount (); i++) {
actionBar.addTab(actionBar.newTab ()
.setText(mSectionsPagerAdapter.getPageTitle (i))
.setTabListener (this));
}
mViewPager.setCurrentItem (position);
}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item) {
switch (item.getItemId ()) {
case R.id.action_settings:
final Intent intent = new Intent (this, MainActivity.class);
startActivity (intent);
return true;
default:
return super. onOptionsItemSelected (item);
}}
@Override
public void onTabSelected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition ());
}
@Override
public void onTabUnselected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected (ActionBar. Tab tab,
FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter (FragmentManager fm) {
super (fm);
}
@Override
public Fragment getItem (int position) {
Fragment fragment = new DummySectionFragment ();
Bundle args = new Bundle ();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position +1);
fragment.setArguments (args);
return fragment;
}
@Override
public int getCount () {
return xxx;
}
@Override
public CharSequence getPageTitle (int position) {
Locale l = Locale.getDefault ();
switch (position) {
case 0:
return getString(R.string.introduction).toUpperCase (l);
case 17:
return getString(R.string.ch17).toUpperCase (l);
}
return null;
}}
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = «section_number»;
public DummySectionFragment () {
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int pos=getArguments().getInt (ARG_SECTION_NUMBER) -1;
View rootView = inflater.inflate(R.layout.activity_content, container, false);
WebView myWebView = (WebView) rootView.findViewById(R.id.webview);
myWebView.loadUrl("file:///android_asset/page"+pos+".html»);
return rootView;
}}}
В классе ContentActivity в методе onCreate () создается экран, содержимое которого определяется компоновкой activity_main_content. xml:
http://schemas.android.com/apk/res/android"ewPager xmlns: android="<android.support.v4.view.Vi
xmlns: tools="http://schemas.android.com/tools"
android: id="@+id/pager»
android: layout_width=«match_parent»
android: layout_height=«match_parent»
tools:context=".ContentActivity» />
SectionsPagerAdapter-адаптер ViewPager-компонента создает объекты android.support.v4.app.Fragment, метод onCreateView () класса которых получает в качестве параметра номер экрана, на основе которого формируется отображаемый контент. При этом содержимое экрана определяется компоновкой activity_content. xml:
<?xml version=«1.0» encoding=«utf-8»? >
<WebView xmlns: android="http://schemas.android.com/apk/res/android"
android: id="@+id/webview»
android: layout_width=«fill_parent»
android: layout_height=«fill_parent» />
В методе onCreateView () класса DummySectionFragment динамически изменяется содержимое компонента WebView на основе номера экрана и соответственно номера раздела контента, обеспечивая переключение между HTML-страницами соответствующей папки каталога assets проекта приложения.
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.