- 안드로이드 기초
- 안드로이드 설치
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을 설치하도록 하겠다.
- 버젼이 30이 아니라서 구동이 안된다. 다음 경로에서 31을 30으로 수정해준다.
- 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가 뜨도록 하겠다.
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);
}
}
'ICIA 수업일지' 카테고리의 다른 글
2021.09.27 수업일지(안드로이드 개발 기초, SQLite) (0) | 2021.09.27 |
---|---|
2021.09.24 수업일지(안드로이드 개발 기초, SQLite) (0) | 2021.09.24 |
2021.09.17 수업일지(React.js을 이용한 블로그 개설) (0) | 2021.09.17 |
2021.09.16 수업일지(React.js) (0) | 2021.09.16 |
2021.09.15 수업일지(React.js) (0) | 2021.09.15 |