프로그래밍/XML | JAVA

[안드로이드 스튜디오] 고급 위젯과 이벤트 처리

Codey 2024. 3. 26. 09:32

버튼을 누를때마다 배경 색상 변경

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/clothingImageView"
        android:layout_width="match_parent"
        android:layout_height="252dp"
        android:layout_marginTop="4dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/boy_img" />

    <Button
        android:id="@+id/colorButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginTop="79dp"
        android:text="Color 1"
        app:layout_constraintEnd_toStartOf="@+id/colorButton2"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/clothingImageView" />

    <Button
        android:id="@+id/colorButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="5dp"
        android:text="Color 2"
        app:layout_constraintBaseline_toBaselineOf="@+id/colorButton1"
        app:layout_constraintEnd_toStartOf="@+id/colorButton3"
        app:layout_constraintStart_toEndOf="@+id/colorButton1" />

    <Button
        android:id="@+id/colorButton3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="5dp"
        android:text="Color 3"
        app:layout_constraintEnd_toStartOf="@+id/colorButton4"
        app:layout_constraintStart_toEndOf="@+id/colorButton2"
        app:layout_constraintTop_toTopOf="@+id/colorButton2" />

    <Button
        android:id="@+id/colorButton4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Color 4"
        app:layout_constraintBaseline_toBaselineOf="@+id/colorButton3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/colorButton3" />
</androidx.constraintlayout.widget.ConstraintLayout>

JAVA

package com.example.a05_14;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private ImageView clothingImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        clothingImageView = findViewById(R.id.clothingImageView);

        Button colorButton1 = findViewById(R.id.colorButton1);
        Button colorButton2 = findViewById(R.id.colorButton2);
        Button colorButton3 = findViewById(R.id.colorButton3);
        Button colorButton4 = findViewById(R.id.colorButton4);

        colorButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeClothingColor(Color.RED);
            }
        });

        colorButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeClothingColor(Color.BLUE);
            }
        });

        colorButton3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeClothingColor(Color.GREEN);
            }
        });

        colorButton4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeClothingColor(Color.YELLOW);
            }
        });
    }

    private void changeClothingColor(int color) {
        clothingImageView.setBackgroundColor(color);
    }

}


람다식 사용

JAVA

package com.example.a05_14;

import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private ImageView clothingImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        clothingImageView = findViewById(R.id.clothingImageView);

        Button colorButton1 = findViewById(R.id.colorButton1);
        Button colorButton2 = findViewById(R.id.colorButton2);
        Button colorButton3 = findViewById(R.id.colorButton3);
        Button colorButton4 = findViewById(R.id.colorButton4);

        colorButton1.setOnClickListener(view -> changeClothingColor(Color.RED));
        colorButton2.setOnClickListener(view -> changeClothingColor(Color.BLUE));
        colorButton3.setOnClickListener(view -> changeClothingColor(Color.GREEN));
        colorButton4.setOnClickListener(view -> changeClothingColor(Color.YELLOW));
    }

    private void changeClothingColor(int color) {
        clothingImageView.setBackgroundColor(color);
    }

}

 


샌드위치 토핑 선택

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="샌드위치 선택" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:orientation="horizontal">
        <CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onCheckboxClicked"
            android:text="MEAT" />
        <CheckBox
            android:id="@+id/checkBox2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onCheckboxClicked"
            android:text="CHEESE" />
    </LinearLayout>

    <ImageView
        android:id="@+id/ImageViewSand1"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/sand1" />

    <ImageView
        android:id="@+id/ImageViewSand2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/sand2" />

</androidx.appcompat.widget.LinearLayoutCompat>

JAVA

package com.example.a05_28;

import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    ImageView sand1, sand2;

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

        sand1 = (ImageView) findViewById(R.id.ImageViewSand1);
        sand2 = (ImageView) findViewById(R.id.ImageViewSand2);
    }

    public void onCheckboxClicked(View v) {
        boolean checked = ((CheckBox) v).isChecked();

        switch(v.getId()) {
            case R.id.checkBox:
                if(checked) sand1.setImageResource(R.drawable.sand1);
                else sand1.setImageResource(0);
                break;
            case R.id.checkBox2:
                if(checked) sand2.setImageResource(R.drawable.sand2);
                else sand2.setImageResource(0);
                break;
        }
    }
}