1. 네비게이션 메뉴 바
https://www.youtube.com/watch?v=stwCk_f3sCw
화면 하단의 네비게이션 바와 fragment를 이용해서 여러 앱에서 볼 수 있는 앱의 구조를 만들 수 있었다.
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
|
BottomNavigationView bottomNavigationView;
bottomNavigationView = findViewById(R.id.NavigationId);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
switch (item.getItemId()) {
case R.id.ItemId_1:
break;
case R.id.ItemId_2:
break;
case R.id.ItemId_3:
break;
case R.id.ItemId_4:
break;
case R.id.ItemId_5:
break;
}
}
|
cs |
위와 같은 코드를 통해서 Navigation 바에서 선택된 item에 대한 정보를 얻을 수 있다. 각각 case에 원하는 Fragment를 불러오는 코드를 넣는다면 자연스러운 앱이 될 것이다.
Fragment를 불러오기 위해서는 FragmentManager과 그것에 의해서 얻을 수 있는 FragmentTransaction을 이용해야 한다.
FragmentManager은 getSupportFragmentManager()이 반환하고 변수에 담아서 사용하면 편하다.
그리고 FragmentManager.beginTransaction()이 FragmentTransaction을 반환한다.
그것은 Fragment를 .add(), .replace(), .remove()를 이용해서 추가, 교체, 삭제를 할 수 있다.
1
2
3
4
5
6
7
8
|
FragmentManager fm;
FragmentTransaction ft;
fm = getSupportFragmentManager();
ft = fm.beginTransaction();
ft.replace(R.id.FrameLayoutId, fragment);
ft.commit();
|
cs |
위와 같은 코드를 통해서 fragment를 FrameLayout에 띄울 수 있다.
그리고 fragment를 얻기 위해서는 xml을 파일을 fragment로 실현시켜야하는데 그것을 도와주는 것이
inflater이다.
1
2
3
4
5
6
7
8
9
|
public class Frag extends Fragment {
private View view;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag, container, false);
}
}
|
cs |
inflater을 이용한 위와 같은 class를 통해서 xml을 파일을 fragment를 반환받을 수 있다.
그래서 new Frag()를 이용해서 다른 java파일에서 fragment 불러왔다.
2. 레이아웃
layout의 종류에는
RelativeLayout
TableLayout
GridLayout
FrameLayout
LinearLayout
가 있다.
relativeLayout는
android:layout_alignParentTop=""
android:layout_centerHorizontal=""
android:layout_alignParentTop=""
등의 코드를 통해서 상대적으로 위젯들을 배치하는 layout이다.
TableLayout는
위젯들을
<TableRow
/> 사이에 작성해서 위젯들을 배치한다.
그리고
android:layout_span="n"를 이용해서 (n)칸을 통합시킬 수도 있고
android:layout_column="n"을 이용해서 (n-1)번째 칸에 배치할 수도 있다.
GridLayout은
TableLayout이랑 비슷하지만
더 코드가 복잡하고 더 섬세하게 위젯들을 배치할 수 있다.
먼저
android:layout_columnCount="",
android:layout_rowCount=""를 이용하여 열과 행의 수를 정할 수 있고
위젯 태그 안에서
android:layout_column="",
android:layout_row=""을 이용하여 위치를 정할 수 있고
android:layout_rowSpan="",
android:layout_column=""을 이용하여 확장시킬 수 있다.
(android:layout_gravity=""도 활용해야 한다.)
LinearLayout은
android:orientation="" 어느 방향으로 정렬될지 정할 수 있고
그 방향대로 위젯들이 정렬되는 것이다.
3. 애플리케이션 화면 디자인, 액티비티 화면 전환
액티비티 전환을 위해서는 Intent를 활용해야 한다.
1
2
|
Intent intent = new Intent(Activity_A.this, ActivityName.class);
startActivity(intent);
|
cs |
위 코드를 통해서 밑의 코드와 같이 이름이 ActivityName인 class의
onCreate함수에 의해서 R.layout.(layoutXML파일 이름)으로 찾은 activity를 띄울 수 있다.
1
2
3
4
5
6
7
8
|
public class ActivityName extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ActivityXMLName);
}
}
|
cs |
여기서 빠트리기 쉬운 부분이 있는데 바로 app\manifests\AndroidManifest.xml에 activity를 추가해주는 것이다.
1
2
3
4
5
|
<application
...
<activity android:name=".ActivityName"></activity>
</application>
|
cs |
위와 같이 <activity>를 만들어주면 정상적으로 실행이 될 것이다.
'Android App' 카테고리의 다른 글
Fragment 전환 in Android Studio (0) | 2021.08.02 |
---|---|
recyclerView in Android Studio (0) | 2021.08.02 |
camera, startActivityForResult() 대체, intent.resolveActivity(getPackageManager()) return null in Android Studio (0) | 2021.08.02 |
webViewWithEditText in Android Studio (0) | 2021.08.02 |
sharedPreferences, webView, Navigation in Android Studio (0) | 2021.07.19 |