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
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
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
@color/test_color
@dimen/test_fontkopiuj
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
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
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
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
<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
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