본문 바로가기
ICIA 수업일지

2021.09.23 수업일지(안드로이드 개발 기초, Activity, View)

by 주성씨 2021. 9. 23.

- 안드로이드 기초

- 안드로이드 설치

https://developer.android.com/studio?gclid=Cj0KCQjwqKuKBhCxARIsACf4XuG12zU6ytqtAZsVuXlNM0LFa5aOHkEPntr5nL5NWJShctKch_roh2YaAmLMEALw_wcB&gclsrc=aw.ds 

 

Download Android Studio and SDK tools  |  Android Developers

developer.android.com

 

홈페이지에서 다운받아 해당 파일을 설치한다. 설치는 기본값으로 한다.

 

확인

 

- 안드로이드 시작

안드로이드에서는 화면 하나를 activity라고 칭하고 나는 empty로 진행하도록 하겠다.

 

위와 같이 세팅해준다. 프로젝트 이름은 처음이니 ex01로 지정하겠다.

 

- 어플 구동을 위한 AVD 설치

안드로이드 장비가 없다면 해당 프로그램을 깔아서 가상으로 구동할 수 있다.

안드로이드 스튜디오에서 설치 경로 -> tools - avd(Android Virtual Device

)본인은 pixel 2 android api 30 version을 설치하도록 하겠다.

 

빨강색 클릭 구동

 

빨강색 파워on

 

- 버젼이 30이 아니라서 구동이 안된다. 다음 경로에서 31을 30으로 수정해준다.

위치

 

수정 후 오른쪽 상단에 sync now를 클릭해준다.

 

- Run - Run - android로 ex01을 실행해보도록 하자.

 

구동 확인

 

- 이 hello world가 어디서 출력되는지 알아보자.

- src/main/res/layout/activity_main.xml

<?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"
    tools:context=".MainActivity"
    android:padding="10sp"
    android:background="#0000FF">

<!-- 글자를 출력하는 부분 -->
<!-- wrap_content 내용물의 크기만큼 width와 height를 지정하겠다.-->
<!-- match_parent 상위 부모에 맞춰주겠다. -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="안녕 세상아! 나는 나다!"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="20sp"
        android:layout_gravity="center"
        android:layout_margin="20sp"
        android:padding="20sp"/>

<!-- EditText 글자 입력 받을때 사용-->
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="이곳에 입력하세요."
        android:padding="20sp"
        android:layout_margin="10sp"/>
<!-- 버튼 생성 -->
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="저장"/>
<!-- 이미지 삽입 -->
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher_round"
        android:layout_gravity="center"/>
</LinearLayout>

 

확인

 

- 해당 xml이 구동되는 곳

- src/main/java/com/example/ex01/MainActivity.java

 

- 새 페이지 생성

위치

 

- 새 view 생성

 

- 시작 액티비티 변경부

- src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ex01">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <!-- 변경부 -->
        <activity android:name=".MainActivity2"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

- 다시 액티비티 를 꾸며보자

- src/main/java/com/example/ex01/MainActivity.java

- src/main/res/layout/activity_sub.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:hint="이름입력"
        android:layout_gravity="center"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:hint="주소입력"
        android:layout_gravity="center"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="저장"
            />
        <Button
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="취소"
            />
    </LinearLayout>
</LinearLayout>

 

확인

 

- 각 태그에 id 주기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="20sp">
    <EditText
        android:id="@+id/name"
....
        />
    <EditText
        android:id="@+id/address"
....
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:id="@+id/save"
....
            />
        <Button
            android:id="@+id/cancel"
....
            />
    </LinearLayout>
</LinearLayout>

 

- 값들을 가지고 오고 출력하는 작업을 하도록 하겠다.

- src/main/java/com/example/ex01/MainActivity.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText edtname, edtaddress;
    Button btnsave, btncancel;

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

//      findViewbyid로 주소를 저장하여 값을 불러온다..
        edtname = findViewById(R.id.name);
        edtaddress = findViewById(R.id.address);
        btnsave = findViewById(R.id.save);
        btncancel = findViewById(R.id.cancel);

//      버튼 클릭시 두개의 값을 가지고 오도록 하겠다.
        btnsave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view){
                String strName = edtname.getText().toString();
                String strAddress = edtaddress.getText().toString();
                Toast.makeText(MainActivity.this, strName+"\n"+strAddress, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

하단에 뜨는게 Toast 이다.

 

- 취소 버튼 클릭시 마찬가지로 Toast가 뜨도록 하겠다.

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText edtname, edtaddress;
    Button btnsave, btncancel;

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

//      findViewbyid로 주소를 저장하여 값을 불러온다..
        edtname = findViewById(R.id.name);
        edtaddress = findViewById(R.id.address);
        btnsave = findViewById(R.id.save);
        btncancel = findViewById(R.id.cancel);

.....
        btncancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "취소되었습니다.",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

확인

 

 

- 버튼클릭 이벤트 처리로 증가 감소 기능을 해보도록 하겠다.

- src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ex01">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"></activity>
        <activity android:name=".MainActivity2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

- id를 주고 onClick으로 특정 메서드를 정의하도록 하겠다.

- src/main/res/layout/activity_main2.xml

<?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"
    tools:context=".MainActivity2"
    android:orientation="vertical"
    android:gravity="center">
    <TextView
        android:id="@+id/number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0"
    android:textSize="30sp"
    />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/decrease"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="감소"
            android:onClick="mClick"/>
        <Button
            android:id="@+id/increase"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="증가"
            android:onClick="mClick"/>
    </LinearLayout>

</LinearLayout>

 

- src/main/java/com/example/ex01/MainActivity2.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity {

    int count = 0;
    TextView number;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        number = findViewById(R.id.number);
    }

    // 메서드 정의
    public void mClick(View v){
        switch (v.getId()){
            case R.id.increase:
                count++;
                break;
            case R.id.decrease:
                count--;
                break;
        }
        Toast.makeText(MainActivity2.this,count+"",Toast.LENGTH_SHORT).show();
        number.setText(String.valueOf(count));
    }
}

 

확인

 

- 롱클릭시 값이 특정 값(100, 0)으로 바뀌게 하겠다.

- src/main/java/com/example/ex01/MainActivity2.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity {

    int count = 0;
    TextView number;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        number = findViewById(R.id.number);

        Button increase = findViewById(R.id.increase);
        increase.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                count = 100;
                number.setText(String.valueOf(count));
                return true;
            }
    });
        Button decrease = findViewById(R.id.decrease);
        decrease.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                count = 0;
                number.setText(String.valueOf(count));
                return true;
            }
        });
    }

    // 메서드 정의
    public void mClick(View v){
        switch (v.getId()){
            case R.id.increase:
                count++;
                break;
            case R.id.decrease:
                count--;
                break;
        }
        Toast.makeText(MainActivity2.this,count+"",Toast.LENGTH_SHORT).show();
        number.setText(String.valueOf(count));
    }
}

 

확인

 

- RelativeLayout

- src/main/java/com/example/ex01/(new)MainActivity3.java

- src/main/AndroidManifest.xml

....
        <activity android:name=".MainActivity3">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
....

 

- 이미지명에는 대문자가 들어가면 안되고 숫가자가 먼저나오면 안된다.

- src/main/res/layout/activity_main3.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content"
    tools:context=".MainActivity3"
    android:background="#e6ecff"
    android:padding="20sp"
    android:layout_margin="20sp">
    <ImageView
        android:id="@+id/img"
        android:layout_width="100sp"
        android:layout_height="100sp"
        android:src="@drawable/img02"/>
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:text="조승우"
        android:layout_toRightOf="@id/img"
        android:layout_margin="10sp"/>
    <TextView
        android:id="@+id/tel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#001e80"
        android:text="010-1234-5678"
        android:layout_alignParentRight="true"
        android:layout_alignBaseline="@id/name"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cho is a South Korean actor and singer. He is best known for his leading roles in the films The Classic, Marathon, Tazza: The High Rollers and Inside Men as well as in the stage musicals Jekyll and Hyde, Hedwig and the Angry Inch and Man of La Mancha."
        android:layout_below="@id/name"
        android:layout_toRightOf="@id/img"
        android:layout_marginLeft="20sp"
        android:padding="5sp"
        />
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/img"
        android:text="삭제"
        />
</RelativeLayout>

 

확인

 

- 버튼 클릭시 이미지가 사라지고 보이게 하겠다.

- src/main/java/com/example/ex01/MainActivity3.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity3 extends AppCompatActivity {
    ImageView img;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        img = findViewById(R.id.img);
        btn = findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(img.getVisibility()==View.VISIBLE){
                    img.setVisibility(View.INVISIBLE);
                    btn.setText("보이기");
                }else{
                    img.setVisibility(View.VISIBLE);
                    btn.setText("숨기기");
                }
            }
        });
    }
}

 

 

- 메뉴를 만들어보도로 하겠다.

- src/main/res/(new)menu/(new)main.xml

 

 

- src/main/res/menu/main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
        android:title="짜장"/>
    <item android:id="@+id/item2"
        android:title="짬뽕"
        />
    <item android:id="@+id/item3"
        android:title="기타"
        >
        <menu>
            <item
                android:id="@+id/item4"
                android:title="우동"/>
            <item
                android:id="@+id/item5"
                android:title="만두"/>
        </menu>
    </item>
</menu>

 

- src/main/java/com/example/ex01/MainActivity3.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity3 extends AppCompatActivity {
    ImageView img;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
.....
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
}

 

확인

 

- 메뉴 버튼을 클릭시 이벤트가 발생하도록 하겟다.

- src/main/java/com/example/ex01/MainActivity3.java

package com.example.ex01;

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

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity3 extends AppCompatActivity {
    ImageView img;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        img = findViewById(R.id.img);
        btn = findViewById(R.id.btn);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(img.getVisibility()==View.VISIBLE){
                    img.setVisibility(View.INVISIBLE);
                    btn.setText("보이기");
                }else{
                    img.setVisibility(View.VISIBLE);
                    btn.setText("숨기기");
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.item1:
                Toast.makeText(MainActivity3.this, "짜장은 맛있다.", Toast.LENGTH_SHORT).show();
                break;
            case R.id.item2:
                Toast.makeText(MainActivity3.this, "짬뽕은 얼큰해.", Toast.LENGTH_SHORT).show();
                break;
            case R.id.item4:
                Toast.makeText(MainActivity3.this, "우동은 쫄깃해.", Toast.LENGTH_SHORT).show();
                break;
            case R.id.item5:
                Toast.makeText(MainActivity3.this, "만두는 만두.", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

 

확인

 

 

- 서브메뉴를 만들어보도록 하겠다.

- src/main/AndroidManifest.xml

.....
        <activity android:name=".MainActivity2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
.....

 

 

- src/main/res/menu/(new)sub.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="글자지정">
        <menu>
            <group android:checkableBehavior="all">
                <item android:title="큰글씨"
                    android:id="@+id/big"/>
            </group>
            <group android:checkableBehavior="single">
                <item android:title="빨강"
                    android:id="@+id/red"/>
                <item android:title="파랑"
                    android:id="@+id/blue"/>
                <item android:title="초록"
                    android:id="@+id/green"/>
            </group>
        </menu>
    </item>
</menu>

 

- src/main/java/com/example/ex01/MainActivity2.java

package com.example.ex01;

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

import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity {

....

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.sub, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.red:
                number.setTextColor(Color.RED);
                break;
            case R.id.blue:
                number.setTextColor(Color.BLUE);
                break;
            case R.id.green:
                number.setTextColor(Color.GREEN);
                break;
        }
        return super.onOptionsItemSelected(item);
    }

.....
}

 

확인

 

- 색 선택시 checked 가 true가 되도록 하겠다.

- 큰글씨 checked이면 100px unchecked이면 200px으로 변경되도록 하겠다. 

- src/main/java/com/example/ex01/MainActivity2.java

package com.example.ex01;

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

import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity {

    int count = 0;
    TextView number;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.sub, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        int color = number.getTextColors().getDefaultColor();
        switch (color){
            case Color.RED:
                menu.findItem(R.id.red).setChecked(true);
                break;
            case Color.BLUE:
                menu.findItem(R.id.blue).setChecked(true);
                break;
            case Color.GREEN:
                menu.findItem(R.id.green).setChecked(true);
                break;
        }
        if(number.getTextSize()==200){
            menu.findItem(R.id.big).setChecked(true);
        }else{
            menu.findItem(R.id.big).setChecked(false);
        }
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.red:
                number.setTextColor(Color.RED);
                break;
            case R.id.blue:
                number.setTextColor(Color.BLUE);
                break;
            case R.id.green:
                number.setTextColor(Color.GREEN);
                break;
            case R.id.big:
                if(item.isChecked()){
                    number.setTextSize(TypedValue.COMPLEX_UNIT_PX,100);
                }else{
                    number.setTextSize(TypedValue.COMPLEX_UNIT_PX,200);
                }
                break;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        number = findViewById(R.id.number);
        number.setTextSize(TypedValue.COMPLEX_UNIT_PX,100);
.....
    }

    // 메서드 정의
    public void mClick(View v){
.....
    }
}

 

확인

 

 

- 이제 가장 많이 사용하는 ListView를 이용해보도록 하겠다.

- 신규 empty activity를 만들겠다.

- src/main/AndroidManifest.xml

.....
        <activity android:name=".MainActivity4">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
.....

 

- src/main/res/layout/(new)activity_main4.xml

<?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"
    tools:context=".MainActivity4">
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

 

- src/main/java/com/example/ex01/(new)MainActivity4.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity4 extends AppCompatActivity {
    ListView list;

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

        list = findViewById(R.id.list);

        ArrayList<String> array = new ArrayList<>();
        array.add("김철수");
        array.add("박영희");
        array.add("이방자");

        // 안드로이드 제공 어레이 어뎁터                                        어뎁터 모양, 데이터 목록
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
        list.setAdapter(adapter);

    }
}

 

확인

 

- 이름입력 칸을 만들고 이름을 추가할 수 있도록 하겠다.

- src/main/res/layout/activity_main4.xml

<?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"
    tools:context=".MainActivity4"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <EditText
            android:id="@+id/name"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
            android:hint="이름입력"/>
        <Button
            android:id="@+id/add"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="+"
            android:onClick="mClick"/>
        <Button
            android:id="@+id/remove"
            android:layout_width="0sp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="-"
            android:onClick="mClick"/>
    </LinearLayout>
    <ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</LinearLayout>

 

- src/main/java/com/example/ex01/MainActivity4.java

package com.example.ex01;

        import androidx.appcompat.app.AppCompatActivity;

        import android.os.Bundle;
        import android.widget.ArrayAdapter;
        import android.widget.ListView;

        import java.util.ArrayList;

public class MainActivity4 extends AppCompatActivity {
    ListView list;

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

        list = findViewById(R.id.list);

        ArrayList<String> array = new ArrayList<>();
        array.add("김철수");
        array.add("박영희");
        array.add("이방자");

        // 안드로이드 제공 어레이 어뎁터                                        어뎁터 모양, 데이터 목록
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_single_choice,array);
        list.setAdapter(adapter);
        // 개별 선택이 가능하도록 아래와 같이 모드를 설정해주고 위 adapter에서도 single_choice로 바꾼다.
        list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    }
}

 

확인

 

- mClick 를 정의하겠다.

- src/main/java/com/example/ex01/MainActivity4.java

package com.example.ex01;

        import androidx.appcompat.app.AppCompatActivity;

        import android.os.Bundle;
        import android.view.View;
        import android.widget.ArrayAdapter;
        import android.widget.EditText;
        import android.widget.ListView;
        import android.widget.Toast;

        import java.util.ArrayList;

public class MainActivity4 extends AppCompatActivity {
    ListView list;
    EditText name;
    // 전역변수 선언
    ArrayList<String> array;
    ArrayAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        list = findViewById(R.id.list);
        name = findViewById(R.id.name);

        array = new ArrayList<>();
        array.add("김철수");
        array.add("박영희");
        array.add("이방자");

        // 안드로이드 제공 어레이 어뎁터                                        어뎁터 모양, 데이터 목록
        adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_single_choice,array);
        list.setAdapter(adapter);
        list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    }

    public void mClick(View v){
        switch(v.getId()){
            case R.id.add:
                String strName = name.getText().toString();
                if(strName.length()==0){
                    Toast.makeText(this,"이름을 입력하세요.",Toast.LENGTH_SHORT).show();
                }else{
                    // 목록에 이름넣기
                    array.add(strName);
                    // 어뎁터 자동 설정
                    adapter.notifyDataSetChanged();
                    // 이름입력칸 초기화
                    name.setText("");
                }
                break;
            case R.id.remove:
                break;
        }
    }
}

 

확인

 

- 삭제를 해보도록 하겠다.

.....
    public void mClick(View v){
        switch(v.getId()){
            case R.id.add:
                String strName = name.getText().toString();
                if(strName.length()==0){
                    Toast.makeText(this,"이름을 입력하세요.",Toast.LENGTH_SHORT).show();
                }else{
                    // 목록에 이름넣기
                    array.add(strName);
                    // 어뎁터 자동 설정
                    adapter.notifyDataSetChanged();
                    // 이름입력칸 초기화
                    name.setText("");
                }
                break;
            case R.id.remove:
                int position = list.getCheckedItemPosition();
                if(position == ListView.INVALID_POSITION){
                    Toast.makeText(this,"삭제할 이름을 선택하세요.",Toast.LENGTH_SHORT).show();
                }else{
                    // 해당 위치 목록 삭제
                    array.remove(position);
                    // 어뎁터 자동 설정
                    adapter.notifyDataSetChanged();
                    // 선택 초기화
                    list.clearChoices();
                }
                break;
        }
    }
.....

 

확인

 

- 시작 엑티비티를 만들겠다.

- 시작 엑티비티에서 오늘 만든 각 엑티비티로 갈 수 있는 버튼을 만들겠다.

- src/main/java/com/example/ex01/(new)StartActivity.java

- src/main/AndroidManifest.xml

.....
        <activity android:name=".StartActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
.....

 

- src/main/res/layout/(new)activity_start.xml

<?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"
    tools:context=".StartActivity"
    android:orientation="vertical"
    android:padding="50sp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="연습1"
        android:onClick="mClick"/>
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="연습2"
        android:onClick="mClick"/>
    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="연습3"
        android:onClick="mClick"/>
    <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="연습4"
        android:onClick="mClick"/>
</LinearLayout>

 

- src/main/java/com/example/ex01/StartActivity.java

package com.example.ex01;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class StartActivity extends AppCompatActivity {

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

    public void mClick(View v){
        Intent intent=null;
        switch (v.getId()){
            case R.id.btn1:
                intent = new Intent(this, MainActivity.class);
                break;
            case R.id.btn2:
                intent = new Intent(this, MainActivity2.class);
                break;
            case R.id.btn3:
                intent = new Intent(this, MainActivity3.class);
                break;
            case R.id.btn4:
                intent = new Intent(this, MainActivity4.class);
                break;
        }
        startActivity(intent);
    }
}

 

확인