์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํผ๊ณต์ฑ๋ฆฐ์ง
- ํผ๊ณต๋จ
- join
- ์ธํ๋ฐ
- CS
- ํผ๊ณตํ
- ์นด์นด์ค์ฝํ
- ์คํฐ๋
- MySQL
- java
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์๊ณ ๋ฆฌ์ฆ
- ๊ธฐ์ ๋ฉด์
- SQL
- ์๋๋ก์ด๋
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฝํ๋ฆฐ
- Kotlin
- Til
- ์๋ฃ๊ตฌ์กฐ
- ์๋๋ก์ด๋์คํ๋์ค
- ์ ์ฒ๊ธฐ
- select
- ์ฝํ
- Android
- doitandroid
- ์ค๋ธ์
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- ์๋ฐ
- groupby
- Today
- Total
Welcome! Everything is fine.
[Android] ์ธํ๋ ์ด์ ๋ณธ๋ฌธ
๐ XML ํ์ผ๊ณผ ์์ค์ฝ๋ ์ฐ๊ฒฐ
XML ํ์ผ๊ณผ ์์ค์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ๊น? ๋ค์ ์ฝ๋๋ ์ ํ๋ก์ ํธ๊ฐ ์๊ธธ ๋ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ ์์ค๋ก, setContentView ๋ฉ์๋๊ฐ XML ๋ ์ด์์ ํ์ผ์ ์ฐ๊ฒฐํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ค์๋งํด setContentView ๋ฉ์๋์ XML ๋ ์ด์์ ํ์ผ ์ด๋ฆ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ์ฌ XML ๋ ์ด์์๊ณผ ์์ค์ฝ๋๋ฅผ ์ฐ๊ฒฐํ ๊ฒ์ด๋ค. ์ด๋ XML ๋ ์ด์์ฐ์ค์ด ์ด๋ฆ์ R.layout.activity_main๊ณผ ๊ฐ์ด ์ง์ ํด์ผํ๋ค.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
R.layout.activity_main์์
- R → ํ๋ก์ ํธ ์ฐฝ์ ๋ณด์ด๋ res ํด๋ ์๋ฏธ
- layout → res ํด๋์ layout ํด๋ ์๋ฏธ
- activity_main → /app/res/layout ํด๋ ์์ ์๋ activity_main.xml ํ์ผ ์๋ฏธ
setContentView ๋ฉ์๋์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋ฉด์ ๋ํ๋ ๋ทฐ๋ฅผ ์ง์ ํ๋ค.
- ๋ ์ด์์ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒดํํ๋ค.
์ค์ ๋ก ์ฑ์ด ์คํ๋๋ฉด XML ๋ ์ด์์(ํ๋ฉด ๋ฐฐ์น ์ ๋ณด)์ ์์ค ์ฝ๋์์ ์ฌ์ฉํ๋ค. ์์๋ฅผ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฑ์ด ์คํ๋๋ค.
- XML ๋ ์ด์์์ ๋ด์ฉ์ด ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒดํ๋๋ค.
- ๊ฐ์ฒดํ๋ XML ๋ ์ด์์์ ์์ค ํ์ผ์์ ์ฌ์ฉํ๋ค.
์ด๋ ๊ฒ XML ๋ ์ด์์์ ๋ด์ฉ์ด ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒดํ๋๋ ๊ณผ์ ์ '์ธํ๋ ์ด์ (inflation)'์ด๋ผ๊ณ ํ๋ค.
๐ ๋ถ๋ถ ํ๋ฉด ๋ณด์ฌ์ฃผ๊ธฐ
์ ์ฒด ํ๋ฉด์ด ์๋ ๋ถ๋ถ ํ๋ฉด๋ ๋ณ๋์ XML ๋ ์ด์์ ํ์ผ์ ์ ์ํ ํ ๋ถ๋ฌ์ ๋ณด์ฌ์ค ์ ์๋ค. ๊ทธ๋ฌ๋ setContentView๋ ํ๋ฉด ์ ์ฒด๋ฅผ ์ค์ ํ๋ ์ญํ ๋ง์ ์ํํ๋ค. ๋ถ๋ถ ํ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒดํํ๋ ค๋ฉด ์ธํ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผํ๋ค. ์ธํ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ LayoutInflater ํด๋์ค๊ฐ ์ ๊ณต๋๋ค. LayoutInflater ํด๋์ค๋ ์์คํ ์๋น์ค๋ก ์ ๊ณตํ๋ ํด๋์ค๋ผ์ getSystemService ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ LayoutInflater ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ํ ์ฌ์ฉํด์ผํ๋ค.
* ์์คํ ์๋น์ค : ๋จ๋ง์ด ์คํ๋๋ฉด์ ํญ์ ์คํ๋๋ ์๋น์ค
getSystemService(Context.LAYOUT_INFLATER_SERVICE)
๐ ์์ฝ
- ๋ฉ์ธ ๋ ์ด์์ → setContentView(R.layout.activity_main)์ผ๋ก ๊ฐ์ฒดํํ์ฌ ํ๋ฉด์ ๋ํ๋
- ๋ถ๋ถ ๋ ์ด์์ → LayoutInflater ๊ฐ์ฒด ์ฌ์ฉํ์ฌ ๋ทฐ๊ทธ๋ฃน ๊ฐ์ฒด๋ก ๊ฐ์ฒดํ(์ธํ๋ ์ด์ )ํ ํ ๋ฉ์ธ ๋ ์ด์์์ ์ถ๊ฐ
๋ค์ ์ฑ ์คํํ๋ฉด์ด ๊ทธ ์์ ์ธ๋ฐ, '์ถ๊ฐํ๊ธฐ' ๋ฒํผ์ ๋๋ฅด๋ฉด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด ๋ถ๋ถ ํ๋ฉด์ด ๋ํ๋๊ฒ ๋๋ค. activity_menu.xml ํ์ผ๊ณผ sub1.xml ํ์ผ์ ๋ง๋ค๊ณ , MenuActivity.java ํ์ผ์์ ์์ค ์ฝ๋๋ฅผ ์ ์๋ค. '์ถ๊ฐํ๊ธฐ' ๋ฒํผ ์๋์ชฝ์ LinearLayout์ ๋ง๋ค๊ณ id๋ฅผ container๋ก ์ค์ ํ ๋ค, ์ด container ๊ฐ์ฒด์ ๋ถ๋ถ ํ๋ฉด xml ํ์ผ์ ๋ ์ด์์์ ์ค์ ํ๋ ๊ฒ์ด๋ค.
๋ค์์ MenuActivity.java ํ์ผ์ ์์ค ์ฝ๋๋ค. ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณด๋ฉด ์ดํดํ ์ ์๋ค.
- ์ ์ฒด ๋ ์ด์์(activity_menu.xml)์ ์์ชฝ ๋ ์ด์์(container)์ ์ฐธ์กฐํ๊ธฐ ์ํด findViewById(R.id.container) ๋ผ๊ณ ์ ๋ ฅํ๊ณ ๊ทธ๊ฒ์ container ๋ณ์์ ๋ฃ์๋ค.
- ๋ฒํผ์ ํด๋ฆญํ์ ๋์ ์ด๋ฒคํธ๋ฅผ onClick ๋ฉ์๋ ์์ ์ ๋ ฅํ๋ค.
- ๊ทธ ์์์ getService ๋ฉ์๋๋ก LayoutInflater ๊ฐ์ฒด๋ฅผ ์ฐธ๊ณ ํ๋ค.
- ๊ทธ ์ฐธ์กฐํ ์ธํ๋ ์ดํฐ์ inflate ๋ฉ์๋์ ํ๋ฆฌ๋ฏธํฐ๋ก R.layout.sub1, container ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
- ์ด ๊ณผ์ ์์ ๋ถ๋ถ ๋ ์ด์์(sub1.xml)์ ์ ์๋ ๋ทฐ๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋๋ฉฐ ๊ฐ์ฒดํ๋๋ค.
- ๊ฐ์ฒดํ๋๋ฉด ๋ถ๋ถ ๋ ์ด์์(sub1.xml)์ ๋ค์ด์๋ tetxView์ CheckBox๋ฅผ findViewById ๋ฉ์๋๋ก ์ฐธ์กฐํ ์ ์๋ค.
- ์ฃผ์ํ ์ ์ container.findViewById(R.id.checkbox)์ ๊ฐ์ด container ๊ฐ์ฒด์ findViewById ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
public class MenuActivity extends AppCompatActivity {
LinearLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
container = findViewById(R.id.container);
Button button = findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.sub1,container,true);
CheckBox checkBox = container.findViewById(R.id.checkbox);
checkBox.setText("๋ก๋ฉ๋์์ด์.");
}
});
}
}
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก AndroidMenifest.xml ํ์ผ์ ์์ ํด์ผํ๋ค. ์ฑ์ด ์คํ๋์์ ๋ MainActivity๊ฐ ์๋ MenuActivity ํ๋ฉด์ด ๋ํ๋๋๋ก ํ๊ธฐ ์ํด์์ด๋ค. <activity> ํ๊ทธ ์์ ์๋ android:name ์์ฑ ๊ฐ์ ๋ชจ๋ ์์ ํ๋ค. ๊ต์ฌ๋์ ์กฐ๊ธ ๋ค๋ฅด์ง๋ง..์๋์ ๊ฐ์ด ๊ณ ์น๋ ์ฑ์ด ์ ์์ ์ผ๋ก ์๋ํ๋ค. exported์ ๊ดํด ์์๋ด์ผํ ๊ฒ ๊ฐ๋ค.
<activity
android:name=".MainActivity"
android:exported="false" />
<activity
android:name=".MenuActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
* ์ฐธ๊ณ
LayoutInflater์ inflate ๋ฉ์๋์์ attachToRoot๊ฐ ๋ฌด์์ธ์ง ๋ชฐ๋ผ์ ์ ์ ๊ฒ true์ผ๊น ํ๊ณ ๊ตฌ๊ธ์์ ์ฐพ์๋ณด๋ ๋์ถฉ ์ดํด๊ฐ ๊ฐ๋ค. ๋ฐ์ ๋ด๊ฐ ๋ณด๊ณ ์ดํดํ ๋ธ๋ก๊ทธ!
'Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] ์ธํ ํธ(Intent) ์ดํด๋ณด๊ธฐ (0) | 2022.03.10 |
---|---|
[Android] ์๋๋ก์ด๋ ์ฑ์ ๊ตฌ์ฑ์์, ํ๋ฉด(์กํฐ๋นํฐ) ์ ํํ๊ธฐ (0) | 2022.03.09 |
[Android] ํ๋ก๊ทธ๋ ์ค๋ฐ (0) | 2022.03.06 |
[Android] ํ ์คํธ, ์ค๋ต๋ฐ, ์๋ฆผ ๋ํ์์ (0) | 2022.03.06 |
[Android] No speakable text present ์๋ฌ (0) | 2022.03.04 |