์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- ์๋ฐ
- ์นด์นด์ค์ฝํ
- doitandroid
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- CS
- ์ฝํ
- ์ฝํ๋ฆฐ
- ์๋๋ก์ด๋์คํ๋์ค
- join
- ํผ๊ณต์ฑ๋ฆฐ์ง
- ํผ๊ณตํ
- ๊ธฐ์ ๋ฉด์
- ์๋ฃ๊ตฌ์กฐ
- groupby
- SQL
- ์ค๋ธ์
- Android
- ํผ๊ณต๋จ
- MySQL
- ํ๋ก๊ทธ๋๋จธ์ค
- select
- ์ ์ฒ๊ธฐ
- ์๋๋ก์ด๋
- ์๊ณ ๋ฆฌ์ฆ
- java
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- ์ธํ๋ฐ
- Til
- ์คํฐ๋
- Today
- Total
Welcome! Everything is fine.
[Android] ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ณธ๋ฌธ
๐์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์
โ ๋ํ์ ์ธ ์ด๋ฒคํธ ์ ํ
์์ฑ | ์ค๋ช |
ํฐ์น ์ด๋ฒคํธ | ํ๋ฉด์ ์๊ฐ๋ฝ์ผ๋ก ๋๋ฅผ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ |
ํค ์ด๋ฒคํธ | ํคํจ๋๋ ํ๋์จ์ด ๋ฒํผ์ ๋๋ฅผ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ |
์ ์ค์ฒ ์ด๋ฒคํธ | ํฐ์น ์ด๋ฒคํธ ์ค์์ ์คํฌ๋กค๊ณผ ๊ฐ์ด ์ผ์ ํจํด์ผ๋ก ๊ตฌ๋ถ๋๋ ์ด๋ฒคํธ |
ํฌ์ปค์ค | ๋ทฐ๋ง๋ค ์์๋๋ก ์ฃผ์ด์ง๋ ํฌ์ปค์ค |
ํ๋ฉด ๋ฐฉํฅ ์ค์ | ํ๋ฉด์ ๋ฐฉํฅ์ด ๊ฐ๋ก์ ์ธ๋ก๋ก ๋ฐ๋์ ๋ฐ๋ผ ๋ฐ๋ผ ๋ฐ์ํ๋ ์ด๋ฒคํธ |
๐ํฐ์น ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
์ฑ ์ ์๋ ์์ ๋ฅผ ์ค์ตํด๋ณด์๋ค. ํ๋ก์ธ์ค๊ฐ ๋ณต์กํด๋ณด์ด์ง๋ง ์ฐฌ์ฐฌํ ์ดํด๋ณด๋ฉด ์ดํดํ ์ ์์๋ค. ์ฑ ์์ ๋ด๊ฐ ์ดํดํ ๋ด์ฉ์ ๋ฒํธ๋ฅผ ๋งค๊ฒจ ์ ๋ฆฌํด๋ณด์๋ค.
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
View view = findViewById(R.id.view);
view.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent motionEvent){
int action = motionEvent.getAction();
float curX = motionEvent.getX();
float curY = motionEvent.getY();
if(action == MotionEvent.ACTION_DOWN){
println("์๊ฐ๋ฝ ๋๋ฆผ : " + curX + ", " + curY);
} else if(action == MotionEvent.ACTION_MOVE){
println("์๊ฐ๋ฝ ์์ง์ : " + curX + ", " + curY);
} else if(action == MotionEvent.ACTION_UP){
println("์๊ฐ๋ฝ ๋ : " + curX + ", " + curY);
}
return true;
}
});
}
public void println(String data){
textView.append(data + "\n");
}
}
โ ํ ์คํธ๋ทฐ(textView)์ ๋งจ ์ ํ๋์ ๋ทฐ(view)๋ฅผ findViewById ๋ฉ์๋๋ก ์ฐธ์กฐ
โก setOnTouchListener ๋ฉ์๋ ํธ์ถํ์ฌ ๋ฆฌ์ค๋ ๋ฑ๋ก(new ์ฐ์ฐ์๋ฅผ ํตํด OnTouchListener ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ํ๋ผ๋ฏธํฐ๋ก ๋ฆฌ์คํฐ ๊ฐ์ฒด ์ ๋ฌ)
โข ๋ทฐ๊ฐ ํฐ์น๋๋ฉด ํด๋น ๋ฆฌ์ค๋ ๊ฐ์ฒด์ onTouch ๋ฉ์๋ ํธ์ถ(MotionEvent ๊ฐ์ฒด๊ฐ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ)
โฃ getAction ๋ฉ์๋๋ก ํ์ธํ ์ก์ ์ ๋ณด๋ฅผ action ๋ณ์์ ๋ฃ์
โค getX, getY ๋ฉ์๋๋ก ํ์ธํ ์ขํ๊ฐ์ curX, curY ๋ณ์์ ๋ฃ์
โฅ if~else if~else ๊ตฌ๋ฌธ์ผ๋ก ์ก์ ์ ๋ณด ๊ฐ(action)๊ณผ MotionEvent ํด๋์ค์ ์ ์๋ ์์ ๊ฐ์ ๋น๊ต
โฆ textView์ ๊ธ์๋ฅผ ์ถ๊ฐํ์ฌ ์ถ๋ ฅํ๋ println ๋ฉ์๋๋ฅผ ํธ์ถ
โง ์คํํด์ ์ฒซ๋ฒ์งธ ๋ทฐ๋ฅผ ํด๋ฆญํ๋ค ๋ผ๊ฑฐ๋ ํด๋ฆญํ ์ฑ๋ก ์์ง์ด๋ฉด ํ ์คํธ๊ฐ ์ฐํ
์ฑ์ ์คํํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค. ์๊ฐ๋ฝ ์ํ๋ฅผ ๊ตฌ๋ถํ๊ฑฐ๋ ์๊ฐ๋ฝ์ด ์ด๋ ์์น์ ์๋์ง ํ์ธํ ์ ์๋ค.
๐์ ์ค์ฒ ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
- ์ ์ค์ฒ ์ด๋ฒคํธ๋ ํฐ์น ์ด๋ฒคํธ ์ค์์ ์คํฌ๋กค ๋ฑ์ ๊ตฌ๋ณํ ํ ์๋ ค์ฃผ๋ ์ด๋ฒคํธ์ด๋ค.
- GestureDetector ํด๋์ค๋ก ์ ์ค์ฒ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ฉด GestureDetector ๊ฐ์ฒด์์ ๊ฐ ์ํฉ์ ๋ง๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
๐ํค ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
- onKeyDown ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ ์ฒ๋ฆฌํ๋ค.
- onKeyDown์ ํ๋ผ๋ฏธํฐ keyCode : ์ด๋ค ํค๊ฐ ์ฌ์ฉ๋๋์ง ๊ตฌ๋ณํ ๋ ์ฌ์ฉ๋๋ค.
- onKeyDown์ ํ๋ผ๋ฏธํฐ keyEvent : ํค ์ ๋ ฅ ์ด๋ฒคํธ์ ๋ํ ์ ๋ณด๋ฅผ ์๊ณ ์ถ์ ๋ ์ฌ์ฉ๋๋ค.
๋ค์์ ์์คํ [BACK] ๋ฒํผ์ ๋๋ ์ ๋ ํ ์คํธ ๋ฉ์ธ์ง๊ฐ ํ์๋๋ ์์ ์ด๋ค. MainActivity ํด๋์ค์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฅด๊ณ [Generate... - Override Methods... - onKeyDown ๋ฉ์๋]๋ฅผ ์ ํํ๋ค.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
Toast.makeText(this, "์์คํ
[BACK] ๋ฒํผ์ด ๋๋ ธ์ต๋๋ค.", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
์คํํ๋ฉด์ ๋ค์๊ณผ ๊ฐ๋ค.
๐๋จ๋ง ๋ฐฉํฅ์ ์ ํํ์ ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
โ ๋จ๋ง ๋ฐฉํฅ ๋ฐ๊ฟจ์ ๋ ๋ค๋ฅธ ํ๋ฉด ๋ณด์ด๊ฒ ํ๊ธฐ
๋จ๋ง์ ๋ฐฉํฅ์ด ๋ฐ๋์์ ๋๋ ์กํฐ๋นํฐ๊ฐ ์์ด์ก๋ค๊ฐ ๋ค์ ๋ณด์ด๊ฒ ๋๋ค. ์ธ๋ก ๋ฐฉํฅ์ XML ๋ ์ด์์๊ณผ ๊ฐ๋ก ๋ฐฉํฅ์ XML ๋ ์ด์์์ ๋ฐ๋ก ๋ง๋ค์ด๋๋๊ฒ ์ข๋ค. ์ค์ต์์๋ layout ํด๋์ ๊ฐ์ ์ญํ ์ ํ๋ layout-land ๋ผ๋ ์๋ก์ด ํด๋๋ฅผ ๋ง๋ค์๋ค. layout-land ํด๋ ์์ ๋ค์ด์๋ XML ๋ ์ด์์ ํ์ผ(activity_main.xml)์ ๋จ๋ง์ด ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ๋ณด์ผ ๋ ์ฌ์ฉ๋๋ค.
์ ์์ ์๋ layout ํด๋์ activity_main.xml ์์๋ '์ธ๋ก ๋ฐฉํฅ'์ด๋ผ๊ณ ์ฐ๊ณ , layout-land ํด๋์ activity_main.xml ์์๋ '๊ฐ๋ก ๋ฐฉํฅ'์ด๋ผ๊ณ ์ด ์ฑ์ ์คํ์ํจ ๊ฒฐ๊ณผ๋ค.
โ ๋จ๋ง ๋ฐฉํฅ์ด ๋ฐ๋ ๋ ์กํฐ๋นํฐ์ ์ํ ์์๋ณด๊ธฐ
- ์๋ช ์ฃผ๊ธฐ(Life Cycle) ๋๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋ : ํ๋ฉด์ ์ํ์ ๋ฐ๋ผ ์์คํ ์ด ์๋์ผ๋ก ํธ์ถํด์ฃผ๋ ๋ฉ์๋
- ์๋ ์ฝ๋์์๋ onStart, onStop, onDestroy ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ฌ์ ์ํ๊ณ , ํด๋น ๋ฉ์๋๊ฐ ์คํ๋ ๋ ํ ์คํธ ๋ฉ์ธ์ง๊ฐ ๋ณด์ด๋๋ก ํ๋ค. ํ ์คํธ ๋ฉ์ธ์ง๋ฅผ ํตํด ๋จ๋ง์ ๋ฐฉํฅ์ ๋ฐ๊ฟ ๋๋ง๋ค ์กํฐ๋นํฐ๊ฐ ์์ด์ก๋ค๊ฐ ์๋ก ๋ง๋ค์ด์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์กํฐ๋นํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๋ค์ด์ง ๋ → onCreate ๋ฉ์๋ ํธ์ถ
- ํ๋ฉด์ ๋ณด์ด๊ธฐ ์ ์ → onStart ๋ฉ์๋ ํธ์ถ
- ํ๋ฉด์ ๋ณด์ด๋ค๊ฐ ์์ด์ง ๋ → onStop ๋ฉ์๋ ํธ์ถ
- ๋ฉ๋ชจ๋ฆฌ์์ ์์ด์ง ๋ → onDestroy ๋ฉ์๋ ํธ์ถ
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showToast("onCreate ํธ์ถ๋จ.");
}
@Override
protected void onStart(){
super.onStart();
showToast("onStart ํธ์ถ๋จ.");
}
@Override
protected void onStop(){
super.onStop();
showToast("onStop ํธ์ถ๋จ.");
}
@Override
protected void onDestroy(){
super.onDestroy();
showToast("onDestroy ํธ์ถ๋จ.");
}
private void showToast(String data) {
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
}
โ ์ํ ์ ์ฅํ๋ค๊ฐ ๋ณต์ํ๊ธฐ(onSaveInstanceState๋ฉ์๋)
- ๋จ๋ง์ ๋ฐฉํฅ์ด ๋ฐ๋ ๋ ์กํฐ๋นํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ก๋ค๊ฐ ์๋ก ๋ง๋ค์ด์ง๋ฏ๋ก, ์กํฐ๋นํฐ ์์ ์ ์ธํ ๋ณ์์ ๊ฐ๋ ์ฌ๋ผ์ง๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด onSaveInstanceState ์ฝ๋ฐฑ ๋ฉ์๋๊ฐ ์ ๊ณต๋๋ค.
- onSaveInstanceState ๋ฉ์๋ : ์กํฐ๋นํฐ๊ฐ ์ข ๋ฃ๋๊ธฐ ์ ์ ์ํ๋ฅผ ์ ์ฅํด๋๊ณ , onCreate ๋ฉ์๋๊ฐ ํธ์ถ ๋ ๋ ์ ๋ฌ๋๋ ๋ฒ๋ค ๊ฐ์ฒด๋ก ๋ณต์ํ๋ค.
์ค์ต ์ฝ๋์ธ๋ฐ ์ ์๊พธ ๋จ๋ง์ ๊ฐ๋ก๋ก ๋๋ฆด ๋๋ง๋ค ๊ฐ์ ์ข ๋ฃ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ค..๊ฒฝ๊ณ ๋จ๋ ๊ฒ๋ ๋ค ํด๊ฒฐํ๋๋ฐ ์์ง ๋ฌธ์ ๋ฅผ ๋ชป์ฐพ์๋ค.
public class MainActivity extends AppCompatActivity {
String name;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
Button button = findViewById(R.id.button);
button.setOnClickListener(view -> {
name = editText.getText().toString();
showToast("์
๋ ฅ๋ ๊ฐ์ ๋ณ์์ ์ ์ฅํ์ต๋๋ค : " + name);
});
if (savedInstanceState != null){
name = savedInstanceState.getString("name");
showToast("๊ฐ์ ๋ณต์ํ์ต๋๋ค : " + name);
}
}
private void showToast(String data) {
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("name",name);
}
}
โ ๋จ๋ง ๋ฐฉํฅ์ด ๋ฐ๋ ๋ ์กํฐ๋นํฐ ์ ์งํ๋ ๋ฐฉ๋ฒ
- ์กํฐ๋นํฐ๋ ๋ฐ๋์ง ์๊ณ ๋จ์ํ ํ๋ฉด์ ๋ณด์ด๋ ๋ ์ด์์๋ง ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์กํฐ๋นํฐ๋ฅผ ๊ตณ์ด ์์ด๋ค๊ฐ ๋ค์ ๋ง๋ค ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์กํฐ๋นํฐ๋ฅผ ์ ์งํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์ ๊ณต๋๋ค.
'Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ํ ์คํธ, ์ค๋ต๋ฐ, ์๋ฆผ ๋ํ์์ (0) | 2022.03.06 |
---|---|
[Android] No speakable text present ์๋ฌ (0) | 2022.03.04 |
[Android] ๋๋ก์ด๋ธ ๋ง๋ค๊ธฐ (0) | 2022.03.02 |
[Android] ์๋๋ก์ด๋ ๊ธฐ๋ณธ ์์ ฏ ์ฌ์ฉํ๊ธฐ (0) | 2022.03.02 |
[Android] ์๋ก์ด ๋ ์ด์์ ๋ง๋ค๊ธฐ (0) | 2022.02.23 |