Obraz zawierający tekst, Czcionka, Grafika

Opis wygenerowany automatycznie 

Kierunek Informatyka

 

Instrukcja do ćwiczeń laboratoryjnych nr:

13

Nazwa przedmiotu:
Programowanie aplikacji mobilnych

Temat: Lista rozwijana – Spinner. Deklaracja kształtu obiektu  

Tryb studiów: stacjonarne

Czas trwanie ćw.

2x45 min

Autor materiałów: dr Marcin Skuba

 

1. Treści programowe:

Lista rozwijana, spinner, obsługa zdarzeń podczas wyboru listy, pobieranie danycssh i pozycji z listy bez obsługi zdarzenia listy, definiowanie kształtu obiektu.

 

2. Cel zajęć:

Celem zajęć jest poznanie obiektu listy rozwijanej – Spinner oraz jego obsługi (obsług zdarzeń podczas wyboru listy). Tworzenie szablonu kształtu dla obiektu.

 

3. Materiały dydaktyczne

 

 

Plik activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:orientation="vertical"
   
android:gravity="center"
   
android:layout_margin="10dp"
   
android:id="@+id/main"
   
tools:context=".MainActivity">

    <Button
       
android:id="@+id/button"
       
android:layout_marginBottom="30dp"
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:text="Set"/>

    <Spinner
       
android:id="@+id/spinner"
       
android:layout_width="match_parent"
       
android:layout_height="40sp"
       
android:background="@drawable/shape_fields"
       
android:popupBackground="@drawable/shape_fields"
       
/>

</LinearLayout>

 

Plik shapes_fields.xml

 

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape
android:shape="rectangle" >
    <stroke
android:width="2dp"
       
android:color="#0f0"/>

    <solid
android:color="#BAA0BA"/>
    <corners
android:radius="5dp"/>
</shape>
</item>
</layer-list>

 

Plik MainActivity.java

 

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;


public class MainActivity extends AppCompatActivity {
    Spinner
spinner;
    MyRecyclerViewAdapter
adapter;
   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        EdgeToEdge.enable(
this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.
main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
           
return insets;
        });

        String tab[] = {
"Styczeń", "Luty", "Marzec", "Kwiecień", "Maj"};

        ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, tab);
       
spinner = (Spinner) findViewById(R.id.spinner);
       
spinner.setAdapter(adapter);

        
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
           
@Override
           
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String item = parent.getSelectedItem().toString();
                Toast.makeText(MainActivity.this, item +
" id=" + id, Toast.LENGTH_SHORT).show();
            }
           
@Override
           
public void onNothingSelected(AdapterView<?> adapterView) {
                Log.i(
"Spinner", "Spinner nothing selected");
               
return;
            }
        });

        Button button = findViewById(R.id.button);
        button.setOnClickListener(
new View.OnClickListener() {
           
@Override
           
public void onClick(View v) {
                String item =
spinner.getSelectedItem().toString();
               
int position = spinner.getSelectedItemPosition();
                Toast.makeText(MainActivity.this, item +
" position=" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

 

Kod w pliku shapes_fields.xml to definicja Drawable w formacie XML, która tworzy prostokątne tło z obramowaniem i zaokrąglonymi rogami. Jest to bardzo popularny sposób na stylowanie przycisków lub wierszy na liście bez używania gotowych plików graficznych.

 

1. <layer-list>

To kontener, który pozwala nakładać na siebie wiele warstw (obrazków, kształtów). Każdy element <item> wewnątrz to kolejna warstwa. W tym przypadku jest tylko jedna warstwa, więc służy ona jako główny pojemnik.

 

2. <item>

Definiuje pojedynczy obiekt w liście warstw.

 

3. <shape android:shape="rectangle">

Określa, że rysujemy konkretny kształt – w tym przypadku prostokąt.

 

4. <stroke> (Obramowanie)

Ten znacznik odpowiada za krawędzie kształtu:

 

5. <solid> (Wypełnienie)

Definiuje jednolity kolor wnętrza figury:

 

6. <corners> (Rogi)

Odpowiada za zaokrąglenie rogów prostokąta:

 

----------------------------------------------------------------------------

Przykład pobierający dane do listy z pliku zasobów XML

 

Obraz zawierający tekst, Czcionka, zrzut ekranu, design

Zawartość wygenerowana przez AI może być niepoprawna.

 

Plik arrays.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array
name="miesiace_array">
        <item>
Styczeń</item>
        <item>
Luty</item>
        <item>
Marzec</item>
        <item>
Kwiecień</item>
        <item>
Maj</item>
        <item>
Czerwiec</item>
    </string-array>
</resources>

 

Plik MainActivity.java:

 

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;


public class MainActivity extends AppCompatActivity {
    Spinner
spinner;
    MyRecyclerViewAdapter
adapter;
   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        EdgeToEdge.enable(
this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.
main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
           
return insets;
        });

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this,
                R.array.miesiace_array, android.R.layout.simple_spinner_item);

       
// Ustawiamy layout dla rozwijanej listy
       
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

       
spinner = (Spinner) findViewById(R.id.spinner);
       
spinner.setAdapter(adapter);

       
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
           
@Override
           
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String item = parent.getSelectedItem().toString();
                Toast.makeText(MainActivity.this, item +
" id=" + id, Toast.LENGTH_SHORT).show();
            }
           
@Override
           
public void onNothingSelected(AdapterView<?> adapterView) {
                Log.i(
"Spinner", "Spinner nothing selected");
               
return;
            }
        });
    }
}

 

4. Zadania

 

Zadanie 1.

Napisz program według własnego pomysłu, w którym wykorzystaj obiekt listy rozwijanej.