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