Урок 4- Изменения в новой версии Android Studio:

Урок 4-1

Урок 4-2

Урок 4-3

Урок 4-4

Урок 4-5

Урок 4-6 : Внешний вид приложения

Урок 4-7 : Внешний вид приложения

Урок 4-8 : Использование функций

Урок 4-9 : Поиск ошибок в приложении

Полный код урока:

Незабываем что в вашем классе MainActivity нужно оставить имя вашего пакета, все остальное заменяем на этот код!
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.core.view.GravityCompat;
import androidx.appcompat.app.ActionBarDrawerToggle;
import android.view.MenuItem;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private ListView list;
private String[] array;
private ArrayAdapter adapter;
private Toolbar toolbar;
private int category_index;

@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = findViewById(R.id.listView);
array = getResources().getStringArray(R.array.fish_array);
adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,new ArrayList(Arrays.asList(array)));
list.setAdapter(adapter);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Intent intent = new Intent(MainActivity.this,Text_Content_Activity.class);
intent.putExtra("category",category_index);
intent.putExtra("position",position);
startActivity(intent);

}
});

}

@Override
 public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}

}

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
toolbar.setTitle(R.string.fish);
return true;
}

@Override
 public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
 // automatically handle clicks on the Home/Up button, so long
 // as you specify a parent activity in AndroidManifest.xml.
 int id = item.getItemId();

//noinspection SimplifiableIfStatement
 if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

@Override
 public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
 int id = item.getItemId();

if (id == R.id.id_fish) {

fillArray(R.string.fish,R.array.fish_array,0 );

}
else if
 (id == R.id.id_na)
{

fillArray(R.string.na,R.array.na_array,1 );
}
else if (id == R.id.id_sna)
{
toolbar.setTitle(R.string.sna);
array = getResources().getStringArray(R.array.sna_array);
adapter.clear();
adapter.addAll(array);
adapter.notifyDataSetChanged();
category_index = 2;
}
else if (id == R.id.id_pri)
{
toolbar.setTitle(R.string.pri);
array = getResources().getStringArray(R.array.pri_array);
adapter.clear();
adapter.addAll(array);
adapter.notifyDataSetChanged();
category_index = 3;
}
else if (id == R.id.id_history)
{
toolbar.setTitle(R.string.history);
array = getResources().getStringArray(R.array.history_array);
adapter.clear();
adapter.addAll(array);
adapter.notifyDataSetChanged();
category_index = 4;
}
else if (id == R.id.id_advice)
{
toolbar.setTitle(R.string.advice);
array = getResources().getStringArray(R.array.advice_array);
adapter.clear();
adapter.addAll(array);
adapter.notifyDataSetChanged();
category_index = 5;
}

DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
private void fillArray(int title,int arrayList,int index )
{
toolbar.setTitle(title);
array = getResources().getStringArray(arrayList);
adapter.clear();
adapter.addAll(array);
adapter.notifyDataSetChanged();
category_index = index;
}
}

LogoActivity

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class Logo_Activity extends Activity {
// private Animation logoAnim,buttonLogoAnim ;
 private Button bAnim;
private ImageView logoImage;
@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo_activity);
init();
}
private void init()
{



 logoImage = findViewById(R.id.logoView);
bAnim = findViewById(R.id.buttonAnim);

 
 }
public void onClickStart(View view)
{
Intent i = new Intent(Logo_Activity.this,MainActivity.class);
startActivity(i);

}
@Override
 protected void onDestroy() {
super.onDestroy();
finish();
}

Text_Content_Activity

import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.widget.ImageView;
import android.widget.TextView;

public class Text_Content_Activity extends AppCompatActivity {


private TextView text_content;
private Typeface face1;
private ImageView iContent;
private int category = 0;
private int position = 0;
private int [] array_fish = {R.string.fish_1,R.string.fish_2,R.string.fish_3,R.string.fish_4,R.string.fish_5};
private int [] array_na = {R.string.na_1,R.string.na_2,R.string.na_3,R.string.na_4};
private int [] array_image_fish = {R.drawable.karp,R.drawable.shuca,R.drawable.som,R.drawable.osetr,R.drawable.nalim};

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_content);
init();


reciveIntent();


}
private void reciveIntent()
{
Intent i = getIntent();
if(i != null)
{
category = i.getIntExtra("category",0);
position = i.getIntExtra("position",0);
}
switch (category){
case 0:

iContent.setImageResource(array_image_fish[position]);
text_content.setText(array_fish[position]);
break;
case 1:
text_content.setText(array_na[position]);
break;
case 2:

break;
case 3:

break;
case 4:

break;
case 5:

break;
}
}
private void init()
{

text_content = findViewById(R.id.text_main_content);
iContent = findViewById(R.id.imageContent);
face1 = Typeface.createFromAsset(this.getAssets(),"fonts/Lobster-Regular.ttf");
text_content.setTypeface(face1);
}

}

Layout "activity_main":

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

Layout "logo_activity":

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:background="@color/black">

<ImageView
android:id="@+id/logoView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="124dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:background="@color/black"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@drawable/logo_fish"
android:src="@drawable/logo_fish"/>

<Button
android:id="@+id/buttonAnim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="76dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:background="@color/design_default_color_primary"
android:onClick="onClickStart"
android:text="@string/button_start"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/logoView" />
</androidx.constraintlayout.widget.ConstraintLayout>

Layout "text_content":

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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">

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/side_nav_bar"
android:orientation="horizontal">

<ImageView
android:id="@+id/imageContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/som" />

</LinearLayout>

<TextView
android:id="@+id/text_main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:text="@string/fish_1" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="10dp"
android:background="@drawable/side_nav_bar"
android:orientation="horizontal"></LinearLayout>

</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

Layout "nav_header_main":

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="@dimen/nav_header_height"
android:background="@color/design_default_color_primary"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">

<ImageView
android:id="@+id/imageView"
android:layout_width="90dp"
android:layout_height="90dp"
android:contentDescription="@string/nav_header_desc"
android:paddingTop="@dimen/nav_header_vertical_spacing"
app:srcCompat="@drawable/fish_header" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/nav_header_title"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="@color/green"
android:textSize="18sp" />

</LinearLayout>

Layout "app_bar_main":

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".MainActivity">

<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</com.google.android.material.appbar.AppBarLayout>

<include layout="@layout/content_main" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Menu "activity_main_drawer.xml":

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

<group android:checkableBehavior="single">
<item
android:id="@+id/id_fish"
android:icon="@mipmap/ic_list"
android:title="@string/fish" />
<item
android:id="@+id/id_na"
android:icon="@mipmap/ic_fish"
android:title="@string/na" />
<item
android:id="@+id/id_sna"
android:icon="@mipmap/ic_fish"
android:title="@string/sna" />
<item
android:id="@+id/id_pri"
android:icon="@drawable/ic_menu_manage"
android:title="@string/pri" />
</group>

<item android:title="Разное">
<menu>
<item
android:id="@+id/id_history"
android:icon="@drawable/ic_menu_share"
android:title="@string/history" />
<item
android:id="@+id/id_advice"
android:icon="@drawable/ic_menu_send"
android:title="@string/advice" />
</menu>
</item>

</menu>

Values "arrays.xml":

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="fish_array">
<item>Карп</item>
<item>Щука</item>
<item>Сом</item>
<item>Осетр</item>
<item>Налим</item>
</string-array>
<string-array name="na_array">
<item>Червяк</item>
<item>Кукуруза</item>
<item>Хлеб</item>
<item>Рис</item>
</string-array>
<string-array name="sna_array">
<item>Грузила</item>
<item>Крючки</item>
<item>Леска</item>
<item>Блесна</item>
</string-array>
<string-array name="pri_array">
<item>Кукуруза</item>
<item>Хлеб</item>
<item>Рис</item>

</string-array>
<string-array name="history_array">
<item>Рыбак и море</item>
<item>Рыбак и щука</item>
<item>На дону</item>
<item>Случай на рыбалке</item>

</string-array>
<string-array name="advice_array">
<item>Советы по прикормке</item>
<item>Сезон рыбалки</item>
<item>На что клюет</item>
<item>Большой улов</item>

</string-array>

</resources>

Values "colors.xml":

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="green">#74F668</color>
<color name="black">#202020</color>
</resources>

Values "strings.xml":

<resources>
<string name="app_name">Fisherman_Hanbook</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="nav_header_title">Справочник рыбака</string>
<string name="nav_header_subtitle">android.studio@android.com</string>
<string name="nav_header_desc">Navigation header</string>
<string name="action_settings">Settings</string>

<string name="fish">Рыба</string>
<string name="na">Наживка</string>
<string name="sna">Снасти</string>
<string name="pri">Прикормка</string>
<string name="history">Рыбацкие истории</string>
<string name="advice">Полезные советы </string>
<string name="fish_1">Обыкнове́нный сом[1], или европе́йский сом[1] (лат. Silurus glanis) — крупная[2] пресноводная бесчешуйчатая рыба семейства сомовых (Siluridae).

Длина тела до 5 м, вес до 400 кг (по историческим данным)[3]. Л. П. Сабанеев приводит сведения Кесслера о поимке сомов весом более 300 кг в XIX веке, в Днепре, Днестре и Одере[4]. Официально зарегистрирован пойманный сом весом 306 кг, длиной более 3 м и возрастом около 80 лет[5]. Сейчас сомы весом выше 100 кг встречаются крайне редко, тем не менее зарегистрированы случаи поимки сомов длиной более 2,5 м и весом около 150 кг[6]. Анальный плавник длинный, жировой плавник отсутствует, непарные плавники не имеют шипов.

Окрас в большинстве случаев бурый с оттенками коричнево-зелёного, брюхо белое. В зависимости от мест обитания окрас может меняться от почти чёрного до светло-жёлтого. Иногда, очень редко, встречаются сомы альбиносы.

Обитает в реках и озёрах Европы и Европейской части России, кроме бассейна Ледовитого океана. Обычен в Европе и в бассейне Аральского моря.

Икрометание весной в прибрежной зоне среди водной растительности. Самка откладывает икру в гнездо, которое самец охраняет. Половозрелость обычно на пятом году жизни.
В Волге можно встретить особей, масса тела которых достигает около 50 кг[9]. Наиболее крупные сомы (весом более 100 кг) иногда вылавливаются рыбаками в Испании, в р. Эбро, где они были акклиматизированы в середине XX века и быстро размножились[2].

Во многих регионах распространён способ ловли сома на квок.

Сома издавна употребляли в пищу, преимущественно в жареном виде, хотя В. И. Даль в книге «О поверьях, суевериях и предрассудках русского народа» (1845-1846) утверждал, что крестьяне южнорусских губерний и донские казаки его мясом брезговали, называя «чёртовым конём», используя лишь жирный хвост в качестве начинки для пирогов[10].

Примечателен факт, что мусульмане не едят рыбу без чешуи (в том числе и сомов), что вплоть до середины XX века способствовало лучшему сохранению численности сомов в мусульманских регионах.[источник не указан 419 дней] </string>
<string name="fish_2">Список 2 рыбы вает икру в гнездо, которое самец охраняет. Половозрелость обычно на пятом году жизни.
В Волге можно встретить особей, масса тела которых достигает около 50 кг[9]. Наиболее крупные сомы (весом более 100 кг) иногда вылавливаются рыбаками в Испании, в р. Эбро, где они были акклиматизированы в середине XX века и быстро размножились[2].

Во многих регионах распространён способ ловли сома на квок.

Сома издавна употребляли в пищу, преимущественно в жареном виде, хотя В. И. Даль в книге «О поверьях, суевериях </string>
<string name="fish_3">Список 3 рыбы </string>
<string name="fish_4">Список 4 рыбы </string>
<string name="fish_5">Список 5 рыбы </string>

<string name="na_1">Наживка 1 </string>
<string name="na_2">Наживка 2 </string>
<string name="na_3">Наживка 3 </string>
<string name="na_4">Наживка 4 </string>
<string name="button_start">Start</string>


</resources>

В данном примере вы можете заменить текстовые ресурсы на свои, и тем самым превратить справочник рыбака в любой другой справочник. Для того что бы код работал вам нужно создать картинки с идентификаторами как на видео либо в коде заменить идентификаторы картинок на ваши собственные(смотрите видео урок чтобы понять где мы присваиваем идентификаторы для картинок)