Presentation is loading. Please wait.

Presentation is loading. Please wait.

Anekdot ANDROID CLUB 2015. Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech.

Similar presentations


Presentation on theme: "Anekdot ANDROID CLUB 2015. Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech."— Presentation transcript:

1 Anekdot ANDROID CLUB 2015

2 Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech

3 Шаг 1: Создать проект  Создавайте новый проект  Activity – Navigation Drawer Activity

4 Шаг 2: Navigation Drawer  Найдите res/menu/activity_main_drawer.xml  Добавьте три элемента: 1. Aнекдоты 2. Афоризмы 3. Цитаты

5 Решение 2: Navigation Drawer

6 Шаг 3: updateContent()  В MainActivity создавайте новый метод – updateContent  Ничего не возвращает  Принимает int type  Показывайте type в тосте  Вызывайте метод при запуске программы  Вызывайте метод при выбора элемента в navigation drawer – Анекдоты (1), Афоризмы (4), Цитаты(5)

7 Решение 3: updateContent() @SuppressWarnings( "StatementWithEmptyBody" ) @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id. nav_joke ) { updateContent(1); } else if (id == R.id. nav_aphorism ) { updateContent(4); } else if (id == R.id. nav_citation ) { updateContent(5); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id. drawer_layout ); drawer.closeDrawer(GravityCompat. START ); return true ; }

8 Шаг 4: Получить данные  Добавьте разрешение: android.permission.INTERNET  Добавьте библиотеку: compile 'com.loopj.android:android-async-http:1.4.9’  В методе updateContent() получите данные c:  http://rzhunemogu.ru/RandJSON.aspx?CType= [type]  Кодировка данных - windows-1251

9 Решение 4: Получит данные public void updateContent( int type) { AsyncHttpClient client = new AsyncHttpClient(); String url = "http://rzhunemogu.ru/RandJSON.aspx?CType=" + type; client.get(url, new AsyncHttpResponseHandler() { @Override public void onSuccess( int statusCode, Header[] headers, byte [] responseBody) { String json = null ; try { json = new String(responseBody, "windows-1251" ); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public void onFailure( int statusCode, Header[] headers, byte [] responseBody, Throwable error) { } }); }

10 Шаг 5: Лист  Создавайте лист строк – contents  Используя оператор цикла получите данные 10 раз  Каждый раз добавьте содержание content в contents

11 Решение 5: Лист final ArrayList contents = new ArrayList<>(); for ( int i = 0; i < 10; i++) { client.get(url, new AsyncHttpResponseHandler() { @Override public void onSuccess( int statusCode, Header[] headers, byte [] responseBody) { String json = null ; try { json = new String(responseBody, "windows-1251" ); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String[] parts = json.split( "\"" ); String content = parts[3]; contents.add(content); } @Override public void onFailure( int statusCode, Header[] headers, byte [] responseBody, Throwable error) { } }); }

12 Шаг 6: Layout  Добавьте библиотеку: compile 'com.android.support:cardview-v7:23.1.0’  Создавайте layout: listitem_content  Добавьте в listitem - android.support.v7.widget.CardView  В CardView добавьте TextView - tvMyContent

13 Решение 6: Layout

14 Шаг 7: Adapter  Создавайте новый класс – ContentsAdapter  Наследник класса BaseAdapter  Конструктор принимает Context context, ArrayList contents - и инициализирует context, contents  В методе getView – установите значение в tvMyContent

15 Шаг 7: Adapter public class ContentsAdapter extends BaseAdapter { Context context ; ArrayList contents ; public ContentsAdapter(Context context, ArrayList contents) { this. context = context; this. contents = contents; } @Override public int getCount() { return contents.size(); } @Override public Object getItem( int position) { return contents.get(position); } @Override public long getItemId( int position) { return position; } @Override public View getView( int position, View convertView, ViewGroup parent) { View view = parent.inflate( context, R.layout. listitem_content, null ); TextView tvMyContent = (TextView) view.findViewById(R.id. tvMyContent ); String content = (String) getItem(position); tvMyContent.setText(content); return view; } }

16 Шаг 8: Показывать контент  Добавьте ListView – lvContents в сontent_main  Если после добавление контента в список, количество контента – 10 показывайте контент в lvContents

17 Решение 8: Показывать контент if (contents.size() == 10) { ListView lvContents = (ListView) findViewById(R.id. lvContents ); final ContentsAdapter adapter = new ContentsAdapter(MainActivity. this, contents); lvContents.setAdapter(adapter); }

18 Шаг 9: TextToSpeech  MainActivity имплементирует TextToSpeech.OnInitListener  Создавайте объект класса TextToSpeech - tts  Имплементируйте метод onInit()  В методе onInit проверьте status  Если статус – TextToSpeech.SUCCESS то установите язык по умолчанию русским, если нет показывайте в тосте что ошибка  Получите результат установки языка и проверьте  Если резултать равно result LANG_MISSING_DATA или TextToSpeech. LANG_NOT_SUPPORTED, показывайте тост что язык не поддерживается  При нажатии один из анекдотов, анекдот должен читаться

19 Решение 9: TextToSpeech public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, TextToSpeech.OnInitListener { private TextToSpeech mTTS ; @Override public void onInit( int status) { // TODO Auto-generated method stub if (status == TextToSpeech. SUCCESS ) { Locale locale = new Locale( "ru" ); int result = mTTS.setLanguage(locale); //int result = mTTS.setLanguage(Locale.getDefault()); if (result == TextToSpeech. LANG_MISSING_DATA || result == TextToSpeech. LANG_NOT_SUPPORTED ) { Log.e( "TTS", "Извините, этот язык не поддерживается" ); } } else { Log.e( "TTS", "Ошибка!" ); } }

20 Шаг 10: Каллиграфия  Добавьте библиотеку: compile 'uk.co.chrisjenx:calligraphy:2.1.0’  Перейдите в вкладку Project app/src/main -> New- >Folder->Assets Folder  В папку assets добавьте папку fonts  В папку fonts добавьте шрифт – RobotoLight.ttf  В tvContent добавьте: fontPath="fonts/RobotoLight.ttf" tools:ignore="MissingPrefix"

21 Решение 10: Каллиграфия


Download ppt "Anekdot ANDROID CLUB 2015. Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech."

Similar presentations


Ads by Google