JAVA ANDROID 01 (p) - start

JAVA ANDROID 01 (p) - start
ukryj menu
SPEC
aktualizacja: 2022-03-08 10:04:55

1. debugowanie na telefonie w pracowni

ustawienia / o telefonie / wszystkie parametry / wersja MUI - kliknij x 7
ustawienia / opcje programistyczne / wyłącz optymalizację MUI
ustawienia / opcje programistyczne / debugowanie USB


2. Layouty i Widgety

w LinearLayout elementy podrzędne:

- układają się obok siebie lub pod sobą, w zależności od orientacji (vertical, horizontal)
- użycie layoutgravity w elemencie podrzędnym układa go : top, bottom, left, right i inne
- użycie gravity, powoduje zmiany w zawartości elementu : top, bottom, left, right i inne
- użycie weight oraz match_parent powoduje ustalenie procentowej wielkości obszaru zajmowanego przez element

w RelativeLayout elementy podrzędne:

- elementy układają się na sobie, chyba że je odsuniemy odpowiednimi właściwościami 
- użycie layout_alignParentBottom="true" ustawia element u dołu etc
- można używać marginow


Widgety Button, ImageView, TextView, EditText - podstawowe właściwości


<Button        
        android:id="@+id/tv1"        
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:text="test"
        android:background="#ff0000"
        android:textColor="#ffffff"
        android:textSize="24sp"
        />kopiuj





3. statyczne zasoby tekstowe w folderze res

jeśli nie ma danego pliku, dodajemy go: new / Values / resource file

przykłady:

plik res/values/strings.xml

<string name="test_string">test string</string>kopiuj

plik res/values/colors.xml

<color name="test_color">#ff0000</color>kopiuj

plik res/values/dimens.xml

<dimen name="test_font">30sp</dimen>kopiuj

używanie tych zasobów w plikach layoutu xml:

@string/test_string
@color/test_color
@dimen/test_fontkopiuj




4. Obrazki - zamieszczamy w folderze res/drawable 

nazwy obrazków z małych liter, bez spacji, png, bez polskich znaków

oficjalne ikony można znaleźć:

https://material.io/tools/icons/

oraz bardzo dobre narzędzie androida

res/new/image asset

5. Podmiana layoutu dla obu orientacji ekranu 

w /res tworzymy dodatkowy folder o nazwie layout-land
wstawiamy do niego kopię pliku activity_main.xml
ustawiamy layout dla wersji poziomej
android automatycznie wczytuje ten layout przy zmianie orientacji urządzenia

5. xml i java

jednostki

dp - density independent pixels - jednostyka dla layoutów przy różnej gęstości ekranu
sp - scalable pixels - to samo dla wielkości tekstu

xml

<Button
   android:id="@+id/button1"
   android:layout_width="match_parent"
   android:layout_height="100dp" />kopiuj


java

zmienna w klasie

private Button button;kopiuj

w metodzie onCreate klasy MainActivity


button = findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
   @Override
      public void onClick(View v) {
               
      }
});kopiuj


6. konsola (alt + 6)

skrót logd

Log.d("xxx", "klik");
Log.e("xxx", "klik");
Log.i("xxx", "klik");kopiuj


7. tworzenie nowych Activities (ekranów aplikacji)

kolejne ekrany tworzymy

katalog java / prawy klawisz myszy / new / Activity / Empty / nadajemy nową nazwę np SecondActivity

powstają pliki


- nowy plik SecondActivity.java (kod javy)
- nowy plik activity_second.xml (w res/layout)
- poniższy wpis w pliku AndroidManifest.xml (app/manifests)


<activity android:name=".SecondActivity"></activity>kopiuj

8. przechodzenie między Activities

Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);kopiuj


9. przesył danych pomiędzy Activities

a) dane tekstowe

przesył danych tekstowych w ww obiekcie Intent


intent.putExtra("owoc", "śliwka");kopiuj

odbiór danych tekstowych w drugiej Activity, w funkcji onCreate

Bundle bundle = getIntent().getExtras();
String owoc = bundle.getString("owoc").toString();       
Log.d("xxx", owoc); // "śliwka"kopiuj


b) dane liczbowe

przesył danych liczbowych w obiekcie Intent


intent.putExtra("a", 100);
intent.putExtra("b", 200);kopiuj


odbiór danych liczbowych w drugiej activity

Bundle bundle = getIntent().getExtras();
int a = bundle.getInt("a");
int b = bundle.getInt("b");
int suma = a + b;       
Log.d("xxx", "suma = " + suma);kopiuj


10. ActionBar

pokazanie strzałki na actionbar (w onCreate)

ActionBar actionBar =  getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);kopiuj


obsługa kliknięcia strzałki

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
   if (item.getItemId() == android.R.id.home) {
            this.finish();
            return true;
   }
   return super.onOptionsItemSelected(item);
}kopiuj


10. część projektu na dziś - patrz skriny

wykonaj dokładnie taki layout aplikacji jak na skrinach, dla dwu orientacji ekranu

- wszystkie kolory w pliku colors.xml
- wszystkie teksty w pliku strings.xml
- wszystkie wymiary w pliku dimens.xml

użyj layoutów Relative i Linear oraz ImageView, TextView, gravity, weight


11. zadanie dodatkowe

po ukończeniu punktu 10 w 100%

spróbuj wykonać dwie wersje językowe aplikacji:

- podpisy pod ikonami wstaw do res/strings w dwu wersjach (PL/ANG) lub do res/arrays
- dodaj button, przełączający między dwoma językami

przykład przechowania tablicy w pliku xml - tutaj można umieścić wersje danego słowa w dwu językach

plik res/values/arrays.xml

<string-array name="letters">
   <item>a</item>
   <item>b</item>
   <item>c</item>
</string-array>

<integer-array name="ints">
   <item>1</item>
   <item>2</item>
   <item>3</item>
</integer-array>kopiuj





pobranie danych z tych zasobów z poziomu kodu:

Log.d("xxx", String.valueOf(getResources().getString(R.string.teststring)));
Log.d("xxx", String.valueOf(getResources().getDimension(R.dimen.testfont)));
Log.d("xxx", String.valueOf(getResources().getColor(R.color.testcolor)));
Log.d("xxx", Arrays.toString(getResources().getStringArray(R.array.letters)));
Log.d("xxx", Arrays.toString(getResources().getIntArray(R.array.ints)));kopiuj