Warsztaty:
Podstawy programowania na platforme Android

inż. Maciej Nowak

www.maciej-nowak.pl
kontakt@maciej-nowak.pl

www.github.com/maciej-nowak/WorkshopZSLG

Plan warsztatow

  • Podstawy programowania
     
  • Zwinne metodyki pracy
     
  • Narzędzia programistyczne
     
  • User Experience
     
  • Programowanie na platformę Android

Podstawy programowania

Paradygmaty programowania

  • funkcyjny (Haskell)
     
  • imperatywny
     
  • logiczny (Prolog)
     
  • deklaratywny
     
  • strukturalny (Pascal)
     
  • obiektowy (Java)
     
  • hybrydowy (C++, Python)

Programowanie strukturalne

  • Pętle
     
  • Funkcje
     
  • Zmienne
     
  • Typy danych
     
  • Operatory logiczne
     
  • Tablice
     
  • Instrukcje sterujące
     
  • Zakres widoczności zmiennych

Typy danych i zmienne

  • Liczby całkowite
     
  • Liczby zmiennoprzecinkowe
     
  • Znaki
     
  • Łańcuchy tekstowe
     
  • Wartości logiczne
public class Typy{
  public static void main(String[] args){
    
    char znak; //deklaracja
    znak = 'a'; //inicjalizacja

    int liczba = 1;    
    double liczba2 = 1.0;
    String tekst = "tekst";
    boolean logiczna = true;

    System.out.println(znak +'A');
    System.out.println(liczba + 2);
    System.out.println(liczba2 + 2.0);
    System.out.println(tekst + "owo.pl");
    System.out.println(logiczna + false);
  }
}

Operatory i instrukcje sterujace

  • Operatory matematyczne
     
  • Operatory logiczne
     
  • If...Else...
     
  • Switch
     
  • Wartości logiczne
public class Operatory{
  public static void main(String[] args){

    int a = 17;
    int b = 4;
    int c = a + b;
    c = a - b;
    c = a * b;
    c = a / b;
    c = a % b;

    int d = 5;
    int e = 3;
    boolean prawda = e > 3;
    boolean falsz = d < e;
    boolean porownanie = a == b;
    boolean koniunkcja = (a > b) && (a != b);

    if(prawda) {
        System.out.println("Prawda");
    }
    else {
        System.out.println("Fałsz");
    } 

    switch(e){
      case 1:
        jakieś_instrukcje_1;
        break;
      case 2:
        jakieś_instrukcje_2;
        break;
      default:
         instrukcje, gdy nie znaleziono żadnego pasującego przypadku
}

  }
}

Petle

  • For
     
  • For each
     
  • While
     
  • Do...While
public class Petle{
  public static void main(String[] args){
      
      int licznik = 0;
      while(licznik<10){
          System.out.println("To jest petla");
          licznik++;
      }
      System.out.println("Koniec pętli");


      for(int i=0; i<10; i++){
          System.out.println("To jest pętla");
      }
      System.out.println("Koniec pętli");
  }
}

Tablice

public class Tablice {
    public static void main(String[] args) {
        
        int[] tablica = new int[10];
        for (int i = 0; i < 10; i++)
            tablica[i] = i + 1;

        int zmienna = tablica[3]; 
        for (int i = 0; i < 10; i++)
            System.out.println("Kolejna komórka to: " + tablica[i]);

        int[][] tablica2 = new int[3][3];
        tablica2[2][1] = 5;
        int zmienna2 = tablica2[2][1];

    }
}

Programowanie obiektowe

public class Prostokat {
    int x;
    int y;
 
    public Prostokat(){ }
 
    public Prostokat(int a, int b){
        x = a;
        y = b;
    }

    public int pole() {
        return x*y;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    Prostokat prostokat = new Prostokat(10, 20);
    System.out.println("Współrzędne to: ");
    System.out.println("x: " + prostokat.x);
    System.out.println("y: " + prostokat.y);

    setX(5);
    System.out.println("Pole: " + pole);
}
  • Klasa
     
  • Obiekt
     
  • Konstruktor
     
  • Metody
     
  • Polimorfizm
     
  • Dziedziczenie
     
  • Interfejsy

SCRUM - Metodyki zwinne 

Podejscie kaskadowe

Podejscie adaptacyjne

Kaskadowe vs. adaptacyjne

Iteracja vs. inkrementacja

SCRUM

SCRUM Board

Narzedzia programistyczne

Sublime Text

Github - System kontroli wersji 

Slack

Trello

Jira

User Experience

  • muszę się ich uczyć
     
  • każą mi myśleć
     
  • nie mówią tym samym
    językiem

Czym nie jest UX?

  • sprawiające radość
     
  • użyteczne
     
  • funkcjonalne

Mobilnosc

Ruch mobilny w światowej sieci urośnie 26 - krotnie w ciągu 5 najbliższych lat!

Kiedy jestesmy mobilni?

W jaki sposob uzywamy?

90% ludzi to praworęczni

Przyklady aplikacji

Upraszczaj

Dokonuj zmian

Projektuj

Projektuj

Programowanie na platforme Android

Srodowisko IDE

ok 85% urządzeń mobilnych posiada system Android

Ograniczenia platformy

Wersje systemu

Ograniczenia platformy

Wielkości i gęstości ekranów

Ograniczenia platformy

Fragmentacja - Polska rzeczywistość
(ok 25 tys. urządzeń)

Generowanie projektu

Struktura projektu

Podstawowe komponenty UI

  • TextView
  • EditText
  • Button
  • ImageView
  • CheckBox
  • Spinner
  • ...
  • LinearLayout
  • ScrollView
  • FrameLayout
  • RelativeLayout
  • GridView
  • ...
<View
   android:id="@+id/example_view"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" />

ViewGroup

<LinearLayout
   android:orientation="vertical" 
  ...>
   
   <!-- CHILD VIEW 1 !-->
   android:weight=”1”

   <!-- CHILD VIEW 2 !-->  
   android:weight=”2”

   <!-- CHILD VIEW 3 !-->  
   android:weight=”1”

</LinearLayout>
<RelativeLayout
  ...>
   
   <!-- CHILD VIEW 1 !-->
   
   <!-- CHILD VIEW 2 !-->  
   android:layout_below=”@id/child_1”

   <!-- CHILD VIEW 3 !--> 
   android:layout_below=”@id/child_1”
   android:layout_toRightOf=”@id/child_2”

</RelativeLayout>
<FrameLayout
  ...>
   
   <!-- CHILD VIEW 1 !-->
   android:src=”@drawable/image”

   <!-- CHILD VIEW 2 !-->  
   android:layout_gravity=”top”

   <!-- CHILD VIEW 3 !--> 
   android:layout_gravity=”bottom”

</FrameLayout>

LinearLayout

RelativeLayout

FrameLayout

View

<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/button"
   android:drawableLeft="@drawable/place"/>
<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="@dimen/text_size"
   android:text="@string/text_view"/>
<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:hint="@string/hint"
   android:inputType="textCapSentences" />
<ImageView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:src="@drawable/placetag"
   android:scaleType="centerInside"/>
<CheckBox
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/check_box_on" />
<CheckBox
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/check_box_off" />

Cwiczenie 1

Stwórz ekran aplikacji, który będzie przepisem Twojego ulubionego dania. Zauważ, że przepis może się nie zmieścić w całości na jednym widoku ekranu

Co się przyda?

  • ​NestedScrollView
  • ImageView
  • TextView
  • zasoby: tekst i obrazek

Klasa R - dostep do widokow

Button button = (Button) findViewById(R.id.button);
<Button
   android:id="@+id/button"
   ...
<Button/>
 button.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
       buttonAction(view);
   }
});

Cykl zycia Aktywnosci

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

Intencje

Intent navigate = new Intent(MainActivity.this, SecondActivity.class);
navigate.putExtra("id", "placetag2015");
startActivity(navigate);
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   Intent intent = getIntent();
   String text = intent.getStringExtra("id");
}

Tworzenie Intent

Odbieranie Intent

Cwiczenie 2

Stwórz aplikację, która pozwoli zalogować i wylogować się użytkownikowi. Sprawdź poprawność jego hasła (np.: hasło musi być takie samo jak login)

Co się przyda?

  • 2 Aktywności
  • Intent
  • EditText, Button i TextView

Cwiczenie 3

Stwórz aplikację, która pozwoli na sprawdzenie lokalizacji oraz zrobienie i wyświetlenie zdjęcia

Co się przyda?

  • Intent
  • ImageView, Button i TextView
  • LocationManager
  • Permissions

Cwiczenie 4

Stwórz aplikację, która wyświetli listę elementów (sam tekst lub tekst z obrazkiem), a po wciśnięciu na element wyświetli informacje o jego nazwie

Co się przyda?

  • ListView (już nieużywany) lub RecyclerView (używany w Material Design)
  • Adapter
  • Toast

Android Workshop

By madjer22

Android Workshop

  • 930