Урок 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>
В данном примере вы можете заменить текстовые ресурсы на свои, и тем самым превратить справочник рыбака в любой другой справочник. Для того что бы код работал вам нужно создать картинки с идентификаторами как на видео либо в коде заменить идентификаторы картинок на ваши собственные(смотрите видео урок чтобы понять где мы присваиваем идентификаторы для картинок)