058258498625
76
2021-09-17 10:29:43
1
113

안드로이드 프로그래밍_자바 질문드립니다.



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:id="@+id/baseLayout"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="오른쪽 위 메뉴 버튼을 누르세요." />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="이건 버튼"/>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/itemRed"
        android:title="배경색(빨강)"/>
    <item
        android:id="@+id/itemGreen"
        android:title="배경색(초록)"/>
    <item
        android:id="@+id/itemBlue"
        android:title="배경색(파랑)"/>
    <item android:title="버튼 변경 >> ">
        <menu>
            <item
                android:id="@+id/subRotate"
                android:title="버튼 45도 회전"/>
            <item
                android:id="@+id/subSize"
                android:title="버튼 2배 확대"/>
        </menu>
    </item>
package com.example.prac7777;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    LinearLayout baseLayout;
    Button button1;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater mInflater = getMenuInflater();
        mInflater.inflate(R.menu.menu1, menu);
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("배경색 바꾸기");
        baseLayout = (LinearLayout) findViewById(R.id.baseLayout);
        button1 = (Button) findViewById(R.id.button1);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
//        return super.onOptionsItemSelected(item);
        switch (item.getItemId()) {
            case R.id.itemRed:
                baseLayout.setBackgroundColor(Color.RED);
                return true;
            case R.id.itemGreen:
                baseLayout.setBackgroundColor(Color.GREEN);
                return true;
            case R.id.itemBlue:
                baseLayout.setBackgroundColor(Color.BLUE);
                return true;

            case R.id.subRotate:
                button1.setRotation(45);
                return true;
            case R.id.subSize:
                button1.setScaleX(2);
                return true;
        }
        return false;
    }
}
코드를 적고 앱을 실행했을 때 색은 변하지만 버튼 회전과 확대가 되지 않고 앱이 종료됩니다.
Resource IDs will be non-final by default in Android Gradle Plugin version 8.0, avoid using them in switch case statements
책에 나온 코드 그대로 작성한건데 어느 부분을 수정해야 될까요,,?


0
  • 답변 1

  • HJOW
    3k
    2021-09-17 10:59:19

    책은 예전에 쓰인 서적이기 때문에, 얼마든지 나중에 책안의 코드가 동작 안할 수 있습니다.


    경고메시지

    Resource IDs will be non-final by default in Android Gradle Plugin version 8.0, avoid using them in switch case statements

    가 뭐냐면



    그래들 플러그인 8.0부터, 저 R.id 가 final 이 아니게 될 예정이라서 나중에는 빌드가 안될 것이다

    라는 경고입니다. (오류는 아닙니다.)

    왜냐하면 switch 문 내 case 에는 final 인 상수이거나 리터럴만 넣을 수 있거든요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.