Вы находитесь на странице: 1из 25

На прошлом уроке мы создали сайт на WordPress, теперь начнем создание андроид-приложения.

 В этом
уроке мы создадим проект в среде разработки Android Studio, импортируем необходимые библиотеки,
загрузим графические ресурсы, создадим макеты для экранных компонентов, строковые ресурсы, стили,
цвета и размеры. Создадим основные и  некоторые вспомогательные классы. Также реализуем
навигацию в приложении через Navigation Drawer.

1. Создание проекта
Процесс создания проекта смотрите в видео.
 

2. Импорт библиотек
 
В файле сборки Build.gradle уровня проекта добавьте
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

В файле сборки Build.gradle уровня модуля App добавьте зависимости


dependencies {
    compile 'org.jsoup:jsoup:1.8.3'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.booking:rtlviewpager:1.0.1'
    compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.android.support:recyclerview-v7:25.1.1'
    compile 'com.android.support:design:25.1.1'
    compile 'com.android.support:support-v4:25.1.1'
    compile 'com.android.support:cardview-v7:25.1.1'
    compile 'com.google.android.gms:play-services-gcm:10.0.1'
    compile 'com.google.android.gms:play-services-ads:10.0.1'
  
}

Используйте такие настройки проекта:


compileSdkVersion 25
 
minSdkVersion 16
 
targetSdkVersion 25
 
buildToolsVersion "26.0.2"

Конечно, вы можете пробовать использовать более новые версии библиотек, но при этом могут
возникать ошибки, решать которые вам придется самостоятельно.

3. Добавление ресурсов
 
3.1 В папку res/drawable добавляем графические ресурсы:
 
Фон заголовка панели навигации. Создайте собственное изображение размером 512×288 пикселей с именем
drawer_header.jpg и загрузите в папку res/drawable.
 
Также добавьте иконки для стрелок влево/вправо, обновления страницы, поиска, шаринга и картинку
placeholder.jpg для пустого изображения. Вы можете взять иконки из исходников проекта, ссылка в конце текстовой
версии урока.
 
Также добавьте в папку res/drawable xml-файлы фонов и градиентов.
 
drawer_top_gradient.xml для добавления градиента под имя приложения в панели навигации
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
android:type="linear"
android:endColor="#00c0c0c0"
android:startColor="#88000000"
android:angle="90"/>
</shape>

card_background.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle"
               android:dither="true">
 
            <corners android:radius="2dp"/>
 
            <solid android:color="#ccc" />
 
        </shape>
    </item>
 
    <item android:bottom="2dp">
        <shape android:shape="rectangle"
               android:dither="true">
 
            <corners android:radius="2dp" />
 
   <solid android:color="@color/white" />
 
        </shape>
    </item>
</layer-list>

card_background.xml размещаем в папке res/drawable-v21 для устройств на Android 5 и выше


<?xml version="1.0" encoding="utf-8"?>
<ripple android:color="@color/light_gray" xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/card_background_inner"></item>
</ripple>

card_background_inner.xml размещаем в папке res/drawable-v21 для устройств на Android 5 и выше


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="2dp">
        <shape android:shape="rectangle"
               android:dither="true">
 
            <corners android:radius="2dp" />
 
   <solid android:color="@color/white" />
 
        </shape>
    </item>
</layer-list>

highlight_gradient.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
android:type="linear"
android:endColor="#00c0c0c0"
android:startColor="#99000000"
android:angle="90"/>
</shape>

toolbar_gradient.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
android:type="linear"
android:startColor="#00c0c0c0"
android:endColor="#7F000000"
android:angle="90"/>
</shape>

3.2 В папку res/layout добавляем макеты:


 
activity_comment_sub.xml макет разделителя комментариев
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >
 
   <View
android:layout_width="1dp"
android:layout_margin="8dp"
    android:layout_height="match_parent"
    android:background="@color/myPrimaryColor"/>
    
 
</RelativeLayout>

activity_comments.xml список комментариев


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <include
        android:id="@+id/toolbar_actionbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/toolbar_default" />
 
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/admob_banner_id"
        android:visibility="gone" />
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
 
        <ListView
            android:id="@+id/listView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:clipToPadding="false"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin" />
 
        <TextView
            android:id="@+id/empty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/listView"
            android:layout_centerInParent="true"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:text="@string/no_results" />
    </RelativeLayout>
 
</LinearLayout>

activity_comments_row.xml макет для комментария


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:background="@color/white"
    android:layout_height="match_parent">
    
    <LinearLayout
    android:id="@+id/lineView"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="match_parent">
        
    </LinearLayout>
  
    <RelativeLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="20dp">
        <ImageView
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:id="@+id/ivProfilePhoto"
            android:layout_width="50dp"
            android:layout_height="50dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:id="@+id/tvUsername"
            android:layout_alignTop="@+id/ivProfilePhoto"
            android:layout_toRightOf="@+id/ivProfilePhoto"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="5dp"
            android:maxLines="1"
            android:gravity="left|center_vertical"
            android:textSize="14sp"
            android:textColor="#41739C" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tvComment"
            android:layout_toRightOf="@+id/ivProfilePhoto"
            android:layout_below="@+id/tvUsername"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:gravity="left|center_vertical"
            android:textSize="14sp" />
        </RelativeLayout>
        
</LinearLayout>

activity_details.xml макет для просмотра контента


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:background="@color/myPrimaryColor"
        android:id="@+id/coolblue" />
 
    <app.wordpress.test.util.layout.TrackingScrollView
        android:id="@+id/scroller"
        android:layout_above="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" >
 
      
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/detail_margin"
            android:paddingRight="@dimen/detail_margin"
            android:paddingTop="@dimen/detail_margin"
            android:clipToPadding="false"
            android:orientation="vertical">
 
            <ViewStub
                android:id="@+id/layout_stub"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
 
        </LinearLayout>
    </app.wordpress.test.util.layout.TrackingScrollView>
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/toolbar_gradient" >
 
        <include
            android:id="@+id/toolbar_actionbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            layout="@layout/toolbar_default" />
    </RelativeLayout>
 
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/btnGray"
        android:visibility="gone"
        android:layout_alignParentBottom="true"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/admob_banner_id" />
 
</RelativeLayout>

activity_holder.xml контейнер для фрагментов


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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">
 
    <include
        android:id="@+id/toolbar_actionbar"
        layout="@layout/toolbar_default"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
 
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/adView"
        android:layout_below="@+id/toolbar_actionbar" >
 
    </FrameLayout>
 
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:background="@color/btnGray"
        app:adSize="BANNER"
        android:layout_alignParentBottom="true"
        app:adUnitId="@string/admob_banner_id">
    </com.google.android.gms.ads.AdView>
 
</RelativeLayout>

activity_main.xml макет главного экрана


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" >
 
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.MainActivity">
 
        <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/adView"
            android:fitsSystemWindows="false">
 
            <include
                layout="@layout/toolbar_tabbar" />
 
            <include layout="@layout/activity_main_content" />
 
        </android.support.design.widget.CoordinatorLayout>
 
        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:background="@color/btnGray"
            app:adSize="BANNER"
            android:layout_alignParentBottom="true"
            app:adUnitId="@string/admob_banner_id">
        </com.google.android.gms.ads.AdView>
 
    </RelativeLayout>
 
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/myDrawerBackground"
        app:headerLayout="@layout/drawer_top"
        app:menu="@menu/activity_main_drawer" />
 
</android.support.v4.widget.DrawerLayout>

activity_main_content.xml макет с вью-пейджером, включаемый в макет главного экрана


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="app.wordpress.test.MainActivity"
    tools:showIn="@layout/activity_main">
 
    <app.wordpress.test.util.layout.DisableableViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
    </app.wordpress.test.util.layout.DisableableViewPager>
 
</RelativeLayout>

activity_main_tablet.xml макет для планшетов


<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
 
    
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        ads:headerLayout="@layout/drawer_top"
        ads:menu="@menu/activity_main_drawer" />
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
 
        <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/adView"
            android:fitsSystemWindows="false">
 
            <include
                layout="@layout/toolbar_tabbar" />
 
            <include layout="@layout/activity_main_content" />
 
        </android.support.design.widget.CoordinatorLayout>
 
        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_alignParentBottom="true"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:background="@color/btnGray"
            ads:adUnitId="@string/admob_banner_id"
            ads:adSize="SMART_BANNER"/>
 
    </RelativeLayout>
 
</LinearLayout>

activity_media.xml макет экрана для просмотра медиафайлов


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    android:orientation="vertical" >
 
    <include
        android:id="@+id/toolbar_actionbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/toolbar_default" />
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@android:color/black"
        android:gravity="center" >
 
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"
            android:visibility="gone" />
 
        <VideoView
            android:id="@+id/videoView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_centerInParent="true"
            android:visibility="gone" />
    </RelativeLayout>
 
</LinearLayout>

activity_wordpress_details.xml макет для просмотра статьи сайта


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/contentholder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:elevation="8dp"
    android:animateLayoutChanges="true"
    android:orientation="vertical">
 
 
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="@dimen/image_height_wordpress"
        android:adjustViewBounds="true"
        android:background="@color/extra_light_gray"
        android:scaleType="centerCrop" />
 
 
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_detail_horizontal_margin"
        android:layout_marginRight="@dimen/activity_detail_horizontal_margin"
        android:fontFamily="sans-serif-condensed"
        android:paddingBottom="10dp"
        android:paddingTop="20dp"
        android:textAppearance="?android:attr/textAppearanceLarge" />
 
    <TextView
        android:id="@+id/dateauthorview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_detail_horizontal_margin"
        android:layout_marginRight="@dimen/activity_detail_horizontal_margin"
        android:fontFamily="sans-serif-thin"
        android:paddingBottom="10dp"
        android:textDirection="locale" />
 
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_marginLeft="@dimen/activity_detail_horizontal_margin"
        android:layout_marginRight="@dimen/activity_detail_horizontal_margin"
        android:paddingTop="20dp"
        android:layout_gravity="center_horizontal" />
 
    <WebView
        android:id="@+id/htmlTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_detail_horizontal_margin"
        android:layout_marginRight="@dimen/activity_detail_horizontal_margin"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:visibility="gone" />
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin">
 
        <Button
            android:id="@+id/favorite"
            style="?android:attr/borderlessButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/favorite_button"
            android:textColor="@color/myAccentColor" />
 
        <Button
            android:id="@+id/comments"
            style="?android:attr/borderlessButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/myAccentColor" />
    </LinearLayout>
 
    <app.wordpress.test.util.layout.ExpandedListView
        android:id="@+id/related_list"
        style="@style/listStyleNoPadding"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="@null"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:visibility="visible" />
 
</LinearLayout>

drawer_top.xml макет заголовка панели навигации


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >
 
     <ImageView
        android:id="@+id/imageView1"
        android:src="@drawable/drawer_header"
        android:adjustViewBounds="true"
        android:maxHeight="195dp"
        android:scaleType="centerCrop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/drawer_top_gradient"
        android:paddingLeft="20dp"
        android:paddingTop="20dp"
        android:paddingBottom="10dp"
        android:paddingRight="10dp"
        android:text="@string/app_name"
        android:textSize="32sp"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline"
        android:textColor="@color/white" />
 
    
 
</RelativeLayout>

fragment_fav.xml макет списка избранного


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:orientation="vertical"
      android:layout_height="wrap_content">
      
    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="@null" />
 
    <TextView
        android:id="@+id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:padding="5dp"
        android:layout_marginTop="50dp"
        android:text="@string/no_favorites" />
 
</LinearLayout>

fragment_fav_row.xml макет элемента списка избранного


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="4dp"
        android:layout_marginBottom="4dp"
        android:orientation="vertical"
        android:padding="8dp"
        android:elevation="2dp"
        android:background="@drawable/card_background">
        
<TextView android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
 
</LinearLayout>
</FrameLayout>

fragment_list_nopadding.xml фрагмент для отображения содержимого сайта с прогрессбаром


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <app.wordpress.test.util.layout.NestedScrollingListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="@null"
        style="@style/listStyleNoPadding"
        android:focusable="false"
        android:visibility="gone" />
 
    <include
        android:id="@+id/progressBarHolder"
        layout="@layout/listview_loading"/>
 
</LinearLayout>

fragment_preference_list.xml макет экрана настроек


<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:background="@android:color/transparent">
 
    <ListView android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:paddingTop="0dip"
        android:paddingBottom="@dimen/preference_fragment_padding_bottom"
        android:paddingLeft="@dimen/preference_fragment_padding_side"
        android:paddingRight="@dimen/preference_fragment_padding_side"
        android:scrollbarStyle="@integer/preference_fragment_scrollbarStyle"
        android:clipToPadding="false"
        android:drawSelectorOnTop="false"
        android:cacheColorHint="@android:color/transparent"
        android:scrollbarAlwaysDrawVerticalTrack="true" />
 
    <TextView android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="@dimen/preference_fragment_padding_side"
        android:gravity="center"
        android:visibility="gone" />
 
    <RelativeLayout
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_weight="0"
        android:visibility="gone">
 
        <Button
            android:layout_width="150dip"
            android:layout_height="wrap_content"
            android:layout_margin="5dip"
            android:layout_alignParentLeft="true"
            android:text="Back"
        />
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true">
 
            <Button
                android:layout_width="150dip"
                android:layout_height="wrap_content"
                android:layout_margin="5dip"
                android:text="Skip"
                android:visibility="gone"
            />
 
            <Button
                android:layout_width="150dip"
                android:layout_height="wrap_content"
                android:layout_margin="5dip"
                android:text="Next"
            />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

fragment_webview.xml макет фрагмента вебвью


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/refreshlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
    </android.support.v4.widget.SwipeRefreshLayout>
 
</LinearLayout>

fragment_webview_actionbar.xml макет экшнбара для вебвью


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="right"
    android:weightSum="2"
    android:orientation="horizontal" >
 
    <ImageButton
        android:id="@+id/goBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingRight="10dp"
        android:background="@null"
        android:src="@drawable/ic_action_hardware_keyboard_arrow_left" />
        
    <ImageButton
        android:id="@+id/goForward"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingRight="10dp"
        android:background="@null"
        android:src="@drawable/ic_action_hardware_keyboard_arrow_right" />
 
 
</LinearLayout>

fragment_wordpress_list_row.xml макет элемента списка статей


<?xml version="1.0" encoding="utf-8"?>
 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
 
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="50dp"
    android:orientation="horizontal"
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_marginRight="@dimen/activity_horizontal_margin"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"
    android:elevation="2dp"
    android:padding="8dp"
    android:background="@drawable/card_background" >
 
    <ImageView
        android:id="@+id/thumbImage"
        android:scaleType="centerCrop"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>
 
    <TextView
        android:id="@+id/title"
        style="@style/listTitle"
        android:layout_toRightOf="@id/thumbImage"/>
 
    <TextView
        android:id="@+id/date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:layout_toRightOf="@id/thumbImage"
        android:paddingLeft="5dp"
        android:paddingTop="1dp"
        android:textSize="11sp" />
 
</RelativeLayout>
 
</FrameLayout>

listview_footer.xml макет футера списка с прогрессбаром


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_height="wrap_content"
              android:layout_width="match_parent"
              android:gravity="center">
 
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="50dp"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:layout_height="50dp" />
 
</LinearLayout>

listview_highlight.xml макет верхнего пункта списка статей


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:paddingBottom="5dp"
    android:orientation="vertical" >
 
    <ImageView
        android:id="@+id/imageViewHighlight"
        android:adjustViewBounds="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:maxHeight="180dp" />
 
    <TextView
        android:id="@+id/textViewHighlight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageViewHighlight"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/highlight_gradient"
        android:paddingTop="30dp"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="@string/app_name"
        android:textSize="20sp"
        style="@style/listTitle"
        android:textColor="@color/white" />
 
</RelativeLayout>

listview_loading.xml макет для отображения списка статей с прогрессбаром


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/progressBarInitial"
        android:layout_centerHorizontal="true"
        android:fontFamily="sans-serif-light"
        android:text="@string/loading" />
 
    <ProgressBar
        android:id="@+id/progressBarInitial"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:paddingTop="@dimen/activity_vertical_margin" />
 
</RelativeLayout>

toolbar_default.xml макет тулбара для окна комментариев


<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    style="@style/ToolBarStyle"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    />

toolbar_tabbar.xml макет тулбара для главного экрана


<?xml version="1.0" encoding="utf-8"?>
<app.wordpress.test.util.layout.CustomAppBarLayout
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="wrap_content"
style="@style/ToolBarStyle">
 
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/Toolbar_Popup"
    app:layout_scrollFlags="scroll|enterAlways|snap"/>
 
    <android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="?attr/colorPrimary"
    app:tabGravity="fill"
    app:tabIndicatorColor="@android:color/white"
    app:tabSelectedTextColor="@android:color/white"
    app:tabTextColor="@android:color/white"
    app:tabMode="scrollable"
    app:popupTheme="@style/Toolbar_Popup" />
 
</app.wordpress.test.util.layout.CustomAppBarLayout>

3.3 В папку res/menu добавляем такие ресурсы:


 
activity_main_drawer.xml макет меню панели навигации
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 
    <group android:checkableBehavior="single" android:id="@+id/main_group">
 
        <!-- Content will be added to this group programatically -->
 
    </group>
 
</menu>

favorite_menu.xml макет меню избранного


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

<item android:id="@+id/clear"
       app:showAsAction="ifRoom"
       android:title="@string/favorite_menu_delete"
      android:icon="@android:drawable/ic_menu_delete"/>
 
</menu>

menu_media.xml макет меню медиа


<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    
    <item
        android:id="@+id/download"
        app:showAsAction="always"
        android:title="@string/save"/>
        
    <item
        android:id="@+id/miShare"
        app:showAsAction="always"
        android:title="@string/share"
        app:

refresh_menu.xml макет меню обновления содержимого


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

<item android:id="@+id/refresh"
       app:showAsAction="ifRoom"
       android:title="@string/refresh"
      android:icon="@drawable/ic_action_refresh"/>
</menu>

settings_menu.xml макет меню настроек


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
 
    <item
        android:id="@+id/settings"
        app:showAsAction="never"
        android:title="@string/settings" />
 
    <item
        android:id="@+id/favorites"
        app:showAsAction="never"
        android:title="@string/favorites" />
</menu>

webview_menu.xml макет меню вебвью


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
<item android:id="@+id/share"
    android:title="@string/share"
    app:showAsAction="never" />
<item android:id="@+id/favorite"
    android:title="@string/favorite_button"
    app:showAsAction="never" />
</menu>

wordpress_detail_menu.xml макет меню статьи


<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
 
    <item
        android:id="@+id/menu_share"
        android:icon="@drawable/ic_action_share"
        app:showAsAction="ifRoom"
        android:title="@string/share"/>
    <item
        android:id="@+id/menu_view"
       app:showAsAction="never"
        android:title="@string/open_button"/>
 
</menu>

3.4 Редактируем (или создаем, в случае отсутствия) файлы


папке res/values:
 
В color.xml добавляем такие цвета — вы можете самостоятельно настраивать цвета по своему усмотрению, и после
запуска смотреть, что получилось
<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <!-- Android -->
    <color name="myPrimaryColor">#4688F2</color>
    <color name="myPrimaryDarkColor">#366AD3</color>
    <color name="myAccentColor">#FF9800</color>
    <color name="myDrawerBackground">#F2F2F2</color>
    <color name="myWindowBackground">#DEDEDE</color>
    <color name="myTextPrimaryColor">#000000</color>
    <color name="myNavigationColor">#000000</color>
 
    <color name="btnGray">#ffdbdbdb</color>
    
    <!-- Regular colors -->
    <color name="black">#000000</color>
    <color name="white">#FFFFFF</color>
    <color name="dark_gray">#292929</color>
    <color name="light_gray">#BDBDBD</color>
    <color name="extra_light_gray">#ffdbdbdb</color>
    <color name="grey_darker">#424242</color>
    <color name="grey_dark">#606060</color>
    <color name="grey">#c3c3c3</color>
    <color name="grey_light">#eeeeee</color>
    <color name="grey_lighter">#ededed</color>
 
 
 
    <!-- progress !-->
    <color name="progress_color">@color/grey_light</color>
 
    <!-- Notifications -->
 
    <color name="notification_button_pressed">#55777777</color>
    <color name="notification_icon_background">#737373</color>
    <color name="notification_background">@color/grey_darker</color>
    <color name="simple_sound_cloud_notification_title">#ffffff</color>
    <color name="simple_sound_cloud_notification_subtitle">#979797</color>
 
 
</resources>

В styles.xml добавляем такие стили


<resources>
    
   <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/myPrimaryColor</item>
        <item name="colorPrimaryDark">@color/myPrimaryDarkColor</item>
        <item name="colorAccent">@color/myAccentColor</item>
        <item name="android:textColorPrimary">@color/myTextPrimaryColor</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="windowActionModeOverlay">true</item>
<item name="android:textColor">@color/black</item>
        <item name="android:windowBackground">@color/myWindowBackground</item>
    </style>
    
    <style name="AppThemeBar" parent="AppTheme">
    </style>
 
    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@android:color/white</item>
    </style>
 
    <style name="ToolBarStyle" parent="">
        <item name="android:theme">@style/Toolbar</item>
    </style>
    
    <style name="Toolbar" parent="Base.ThemeOverlay.AppCompat.ActionBar">
        <item name="android:textColorPrimary">#fff</item>
        <item name="titleTextAppearance">@style/Toolbar_Title</item>
    </style>
 
    <style name="Toolbar_Popup" parent="Base.ThemeOverlay.AppCompat.ActionBar">
    <item name="android:textColorPrimary">#fff</item>
    </style>
 
    <style name="Toolbar_Title" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
        <item name="android:textSize">20sp</item>
    </style>
 
    <style name="listTitle">
     <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:lineSpacingExtra">1dp</item>
        <item name="android:paddingLeft">5dp</item>
        <item name="android:paddingTop">2dp</item>
        <item name="android:maxLines">2</item>
        <item name="android:ellipsize">end</item>
        <item name="android:textColor">@color/dark_gray</item>
        <item name="android:fontFamily">sans-serif-light</item>
        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
    </style>
 
    <style name="listStyleNoPadding">
        <item name="android:clipToPadding">false</item>
        <item name="android:listSelector">@android:color/transparent</item>
        <item name="android:paddingBottom">@dimen/activity_vertical_margin</item>
    </style>
 
</resources>

В styles.xml в папке res/values-v21 добавляем такие стили для устройств на Android 5 и выше
<resources>
 
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/myPrimaryColor</item>
        <item name="colorPrimaryDark">@color/myPrimaryDarkColor</item>
        <item name="colorAccent">@color/myAccentColor</item>
        <item name="android:textColorPrimary">@color/myTextPrimaryColor</item>
        <item name="android:navigationBarColor">@color/myNavigationColor</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="windowActionBar">false</item>
<item name="android:textColor">@color/black</item>
        <item name="android:windowBackground">@color/myWindowBackground</item>
        <item name="android:windowContentTransitions">true</item>
    </style>
    
    <style name="AppThemeBar" parent="AppTheme">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
 
    <style name="ToolBarStyle" parent="">
        <item name="android:elevation">@dimen/toolbar_elevation</item>
        <item name="android:transitionName">actionBar</item>
        <item name="android:theme">@style/Toolbar</item>
        <item name="android:popupTheme">@style/Toolbar</item>
    </style>
 
</resources>

В strings.xml добавляем такие строки


<?xml version="1.0" encoding="utf-8"?>
<resources>
 
 
    
    <string name="app_name">Игры Андроид</string>
    
    <!-- API keys -->
    <string name="google_server_key"></string>
    <string name="google_android_key"></string>
 
    <!-- About text, you can use basic html, stay between [ and ] -->
    <string name="about_text"><![CDATA[  
    <b>Версия 1.0</b>
    <br><br>Спасибо, что скачали наше приложение.<br><br>
    ]]></string>
    
    <!-- Enter your Google Play billing details to enable In-App purchases -->
    <string name="google_play_license"></string>
<string name="product_id">add_off_product</string>

    <!-- Enter a ADMOB ID if you would like to display ads-->


    <string name="admob_banner_id"></string>
    <string name="admob_interstitial_id"></string>
    
    <!-- Strings for optional translation below this line -->
    
      <!--  webview  -->
    <string name="webview_title">Игры Андроид</string>
 
    <string name="web_share_begin">"Смотри, что я видел в приложении "" </string>
 
    <!-- media viewer-->
    <string name="volume_low">Turn your volume up!</string>
    <string name="file_audio">Audio</string>
    <string name="file_video">Video</string>
    <string name="file_image">Image</string>
    <string name="now_playing">Now playing</string>
    <string name="notification_playing">Playing audio - Live Stream</string>
    <string name="error_retry">Failed to connect to stream... We have restarted the mediadecoder, please try again.</string>
    <string name="radio_playing_other">Already Playing another station. Press stop and select play again to play the station you have just
selected.</string>
    <string name="downloadmanager_disabled">Download manager needs to be enabled</string>
    
    <!-- favorites -->
    <string name="item_del_text">Очистить \"Избранное\"?</string>
    <string name="item_del_confirmation">Да</string>
    <string name="no_favorites">Здесь отображаются материалы, добавленные в \"Избранное\"</string>
    <string name="favorite_success">Материал добавлен в \"Избранное\"</string>
    <string name="favorite_duplicate">Материал уже добавлен в \"Избранное\"</string>
    <string name="favorite_menu_delete">Удалить из избранного</string>
    
    <!-- settings -->
    <string name="settings_general_summary">Сведения о имени пользователя и пароле</string>
    <string name="settings_general">Общие</string>
    
    <string name="settings_showmenu_summary">Да/нет</string>
    <string name="settings_showmenu">Показать боковое меню при старте приложения</string>
    
    <string name="settings_fontsize_summary">Размер текста статей</string>
    <string name="settings_fontsize">Размер текста</string>
    
    <string name="settings_fontsize_xl">Очень большой</string>
    <string name="settings_fontsize_l">Большой</string>
    <string name="settings_fontsize_m">Стандартный</string>
    <string name="settings_fontsize_s">Маленький</string>
    <string name="settings_fontsize_xs">Очень маленький</string>
    
    <string name="settings_other_summary">Другие сведения</string>
    <string name="settings_other">Другое</string>
    
    <string name="settings_aboutus_summary">Информация о нашем приложении</string>
    <string name="settings_aboutus">О приложении</string>
    
    <string name="settings_rate_summary">Рекомендуйте это приложение другим пользователям</string>
    <string name="settings_rate">Оцените приложение</string>
    
    <string name="settings_billing_summary">Управление покупками в приложения</string>
    <string name="settings_billing">Покупки в приложении</string>
    
    <string name="settings_purchase_summary">Удаление рекламных объявлений и разблокирование содержимого</string>
    <string name="settings_purchase">Отключение рекламы</string>
    
    <string name="settings_restore_purchase_success">Предыдущие покупки были восстановлены</string>
    <string name="settings_purchase_success">Предыдущие покупки были восстановлены</string>
    <string name="settings_purchase_fail">Не удалось выполнить покупку</string>
  
    <string name="dialog_purchase_title">Содержимое заблокировано</string>
    <string name="dialog_purchase">Для просмотра этого содержимого необходимо разблокировать полную версию, сделав разовую
покупку.\n\nЭто также приведет к удалению рекламных объявлений в приложении</string>
    
    <!-- Wordpress -->
    <string name="wordpress_subtitle_start">"Опубликовано "</string>
    <string name="wordpress_subtitle_end">" автором "</string>
    <string name="ok">Ok</string>
    
 
 
    <!-- general-->
    <string name="settings">Настройки</string>
    <string name="favorites">Избранное</string>
    <string name="invalid_configuration">Configuration could not be loaded</string>
    <string name="about_header">О приложении</string>
    <string name="favorite_button">Добавить в Избранное</string>
    <string name="open_button">Открыть</string>
    <string name="loading">Загрузка..</string>
    <string name="downloading">Скачивание..</string>
    <string name="no_results">Нет результатов</string>
    <string name="cancel">Отмена</string>
    <string name="comments">Комментарии</string>
    <string name="share">Поделиться</string>
    <string name="refresh">Обновить</string>
    <string name="already_loading">Мы уже загрузили новое содержимое!</string>
     <string name="opening_video">Открытие видео</string>
    <string name="opening_audio">Открытие аудио</string>
 
    <string name="drawer_open">Menu opened</string>
    <string name="drawer_close">Menu closed</string>
 
    <string name="permissions_required">Необходимо принять все необходимые разрешения для доступа к этому
содержимому</string>
    
    <!-- Connection dialogs -->
    <string name="dialog_connection_title">Нет доступа к серверу</string>
    <string name="dialog_connection_description">Мы не можем связаться с нашим API.\n\nУбедитесь, что вы установили ключи и
параметры API в соответствии с документацией</string>
    <string name="dialog_internet_title">Нет интернет-соединения</string>
    <string name="dialog_internet_description">Нет подключения к Интернету для получения обновленного контента.\n\nДоступен
просмотр только избранных/сохраненных элементов!</string>
    <string name="save">Сохранить</string>
 
</resources>

В dimens.xml добавляем такие размеры


<?xml version="1.0" encoding="utf-8"?>
<resources  >
        
    <!-- Toolbar -->
    <dimen name="toolbar_elevation">4dp</dimen>
 
    <!-- preferenceFragment -->
    <dimen name="preference_fragment_padding_bottom">0dp</dimen>
    <dimen name="preference_fragment_padding_side">16dp</dimen>
    <integer name="preference_fragment_scrollbarStyle">0x02000000</integer>
    
    <!-- Defaults -->
    <dimen name="activity_horizontal_margin">6dp</dimen>
    <dimen name="activity_detail_horizontal_margin">18dp</dimen>
    <dimen name="activity_vertical_margin">6dp</dimen>
 
    <bool name="isTablet">false</bool>
    <bool name="isWideTablet">false</bool>
 
    <!-- DetailLayouts -->
    <dimen name="detail_margin">0dp</dimen>
    <dimen name="image_height_wordpress">250dp</dimen>
 
    <!-- Drawer -->
    <dimen name="drawer_width">304dp</dimen>
 
  
 
</resources>

В dimens.xml в папке res/values-w600dp добавляем такие размеры


<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    
    <!-- preferenceFragment -->
    <dimen name="preference_fragment_padding_side">64dp</dimen>
    
    <!-- Defaults -->
    <dimen name="activity_horizontal_margin">64dp</dimen>
    <dimen name="activity_detail_horizontal_margin">64dp</dimen>
    <bool name="isTablet">true</bool>
    <bool name="isWideTablet">false</bool>
 
    <!-- DetailLayouts -->
    <dimen name="detail_margin">96dp</dimen>
    <dimen name="image_height_wordpress">300dp</dimen>
 
    <!-- Drawer -->
    <dimen name="drawer_width">320dp</dimen>
 
</resources>

В dimens.xml в папке res/values-w800dp-land добавляем такие размеры


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Defaults -->
    <bool name="isTablet">true</bool>
    <bool name="isWideTablet">true</bool>
 
    <!-- DetailLayouts -->
    <dimen name="detail_margin">128dp</dimen>
</resources>

3.5 Другие ресурсы (создаем папки и файлы в случае их


отсутствия)
 
В папку res/xml добавляем макет экрана настроек:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="preferenceScreen" >
<PreferenceCategory
   android:summary="@string/settings_general_summary"
   android:title="@string/settings_general"
   android:key="general" >
   <CheckBoxPreference
     android:key="menuOpenOnStart"
     android:summary="@string/settings_showmenu_summary"
     android:title="@string/settings_showmenu"
     android:defaultValue="false"/>
   <ListPreference
     android:key="fontSize"
     android:title="@string/settings_fontsize"
     android:summary="@string/settings_fontsize_summary"
     android:entries="@array/fontentries"
     android:entryValues="@array/fontvalues"
     android:defaultValue="16"  />
</PreferenceCategory>

  <PreferenceCategory
     android:summary="@string/settings_other_summary"
     android:title="@string/settings_other"
     android:key="other" >
      <Preference
      android:key="about"
      android:summary="@string/settings_aboutus_summary"
      android:title="@string/settings_aboutus" />
      <Preference
      android:key="rate"
      android:summary="@string/settings_rate_summary"
      android:title="@string/settings_rate" />
      
      </PreferenceCategory>

  <PreferenceCategory
     android:summary="@string/settings_billing_summary"
     android:title="@string/settings_billing"
     android:key="billing" >
      <Preference
      android:key="purchase"
      android:summary="@string/settings_purchase_summary"
      android:title="@string/settings_purchase" />
   </PreferenceCategory>
    
</PreferenceScreen>

В папке app/assets создайте папку fonts и поместите туда файлы шрифтов Roboto-Light.ttf и Roboto-Regular.ttf Их
можно взять в исходниках проекта по ссылке в конце текстового урока.
 
В папку app/assets добавляем файл конфигурации config.json для панели навигации и вкладок:
[
 
  {
    "title":"Андроид игры",
    "drawable":"",
    "submenu":"",
    "iap":false,
    "tabs":[
      {
        "title":"",
        "provider":"wordpress",
        "arguments":[
          "http://gameandroid.pw/",
          "",
          "http://gameandroid-pw.disqus.com/;gameandroid-pw;%d http://gameandroid.pw/?p=%d"
        ]
      }
    ]
  },{
    "title":"Аркады",
    "drawable":"",
    "submenu":"",
    "iap":false,
    "tabs":[
      {
        "title":"",
        "provider":"wordpress",
        "arguments":[
          "http://gameandroid.pw/",
          "arcade",
          "http://gameandroid-pw.disqus.com/;gameandroid-pw;%d http://gameandroid.pw/?p=%d"
        ]
      }
    ]
  },{
    "title":"Стратегии",
    "drawable":"",
    "submenu":"",
    "iap":false,
    "tabs":[
      {
        "title":"",
        "provider":"wordpress",
        "arguments":[
          "http://gameandroid.pw/",
          "strategy",
          "http://gameandroid-pw.disqus.com/;gameandroid-pw;%d http://gameandroid.pw/?p=%d"
        ]
      }
    ]
  },{
    "title":"Экшен",
    "drawable":"",
    "submenu":"",
    "iap":false,
    "tabs":[
      {
        "title":"",
        "provider":"wordpress",
        "arguments":[
          "http://gameandroid.pw/",
          "action",
          "http://gameandroid-pw.disqus.com/;gameandroid-pw;%d http://gameandroid.pw/?p=%d"
        ]
      }
    ]
  },{
    "title":"Симуляторы",
    "drawable":"",
    "submenu":"",
    "iap":false,
    "tabs":[
      {
        "title":"",
        "provider":"wordpress",
        "arguments":[
          "http://gameandroid.pw/",
          "simulation",
          "http://gameandroid-pw.disqus.com/;gameandroid-pw;%d http://gameandroid.pw/?p=%d"
        ]
      }
    ]
  },{
    "title":"Гонки",
    "drawable":"",
    "submenu":"",
    "iap":true,
    "tabs":[
      {
        "title":"",
        "provider":"wordpress",
        "arguments":[
          "http://gameandroid.pw/",
          "race",
          "http://gameandroid-pw.disqus.com/;gameandroid-pw;%d http://gameandroid.pw/?p=%d"
        ]
      }
    ]
  }
 
 
]

Рассмотрим его подробнее. JSON-текст представляет собой набор пар ключ: значение. В нашем случае он состоит
из секций — пунктов меню панели навигации, таких как Андроид игры, Аркады, Стратегии т.д. Каждая секция
состоит из вкладок, по умолчанию здесь по одной вкладке и без заголовков. Вы должны добавить свои заголовки
для секций, и при желании можете добавить по несколько вкладок в каждую секцию.
 
Пункт меню содержит заголовок, изображение и подменю (здесь они пустые), параметр доступности только после
совершения покупки в приложении (по умолчанию false) и массив вкладок.
 
Вкладка содержит заголовок и параметр arguments, в котором нужно указать адрес сайта, ярлык рубрики на сайте и
специальный адрес для отображения комментариев с платформы Disqus. Комментариями мы займемся на
следующем уроке, а рубрики на сайте вы должны создать в качестве домашнего задания.
 
Чтобы создать рубрики, в админке сайта в меню выберите пункт Записи > Рубрики. Для создания рубрики нужно
указать ее Название, которое определяет, как элемент будет отображаться на вашем сайте. Далее указываем Ярлык
— это вариант названия, подходящий для URL. Обычно содержит только латинские буквы в нижнем регистре,
цифры и дефисы.
Далее выбираем родительскую группу, если нужно, и добавляем описание.
Жмем Добавить новую рубрику.
Чтобы добавить запись в рубрику, на странице редактирования записи выберите рубрику на панели справа. Можно
добавить запись сразу в несколько рубрик.
 
Ярлык нужной рубрики указываем в файле конфигурации, в параметре arguments, в кавычках после адреса сайта. .