0. Android Studio 설치

다운로드 사이트 : developer.android.com/studio

 

Download Android Studio and SDK tools  |  Android 스튜디오

developer.android.com

1. Flutter 사이트에서 최신 SDK 다운받기

flutter-ko.dev/docs/development/tools/sdk/archive

 

Flutter SDK releases

All current Flutter SDK releases, both stable and developer.

flutter-ko.dev

2. 다운받은 파일을 원하는 곳에 압축해제(예: C:\src\flutter)

 

3. 압축푼 디렉토리의 경로를 환경변수 PATH에 추가

 

4. Flutter 환경 체크한 뒤 [!]가 있는지 체크(!가 있으면 해결해야함)

flutter doctor -v

 

5. Dart와 Flutter 설치

 

6. New Flutter Project... 실행

Flutter SDK path 설정:Flutter SDK 압축 푼 위치 설정
Project Name 입력 후 Finish

 

 참조 : developer.android.com/guide/navigation/navigation-getting-started

 

탐색 구성요소 시작하기  |  Android 개발자  |  Android Developers

이 주제는 탐색 구성요소를 설정하고 사용하는 방법을 설명합니다. 탐색 구성요소의 대략적인 개요는 탐색 개요를 참고하세요. 환경 설정 참고: 탐색 구성요소는 Android 스튜디오 3.3 이상이 필요

developer.android.com

1. 네비게이션 관련 Gradle 추가

 

- build.gradle에 추가

1
2
3
4
5
6
dependencies {    
    // 네비게이션 프래그먼트 추가
    def nav_version = "2.3.3"
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
cs

 

- Safe Args 를 위해 build.gradle에 추가

1
2
3
4
dependencies {
    def nav_version = "2.3.4"
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
cs
1
id 'androidx.navigation.safeargs.kotlin'
cs

 

- view binding 추가

1
2
3
viewBinding {
    enabled = true
}
cs

 

 

 

2. Bottom Navigation 에 들어갈 menu 추가

 

- 메뉴파일 추가하기

res > 마우스 우측버튼 클릭 > New > Adnroid Resource File
Resource type:Menu / File Name 입력 > OK 버튼 클릭

- bottom_nav_menu.xml 에 item 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/restaurantFragment"
        android:title="식당"
        />
    <item
        android:id="@+id/shuttleBusFragment"
        android:title="셔틀"
        />
    <item
        android:id="@+id/dustFragment"
        android:title="미세먼지"
        />
</menu>
cs

 

- item의 title대신 이미지 넣기

res > 마우스 우측버튼 클릭 > New > Vector Asset 
Clip Art 의 버튼을 클릭하여 원하는 아이콘 선택 / 이름 입력

- 선택한 아이콘을 item에 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/restaurantFragment"
        android:title="식당"
        android:icon="@drawable/ic_baseline_restaurant_24"
        />
    <item
        android:id="@+id/shuttleBusFragment"
        android:title="셔틀"
        android:icon="@drawable/ic_baseline_directions_bus_24"
        />
    <item
        android:id="@+id/dustFragment"
        android:title="미세먼지"
        android:icon="@drawable/ic_baseline_filter_drama_24"
        />
</menu>
cs

 

 

3. Fragment 생성

  1) Fragment Layout 생성

 

layout 마우스 우측버튼 클릭 > Layout Resource File
fragment 생성

  2) Layout 위젯 만들기

- tools:context는 context로 연결할 class를 설정

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:gravity="center"
    tools:context="com.example.navigationtutorial02.fragment.Restaurant">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/restaurant_title"
        android:textSize="40dp"
        android:text="식단"
        />
</LinearLayout>​

 

 

  3) Fragment 클래스 생성

- Fragment Package 추가

com.example.navigation_tutorial 마우스 우측버튼 클릭 > New > Package 선택

- fragment 패키지 생성

fragment 입력

- fragment class 생성

fragment package > New > Kotlin File/Class 클릭

- Fragment로 사용할 Class 생성(Restaurant / Shuttle / Dust)

Class 선택 > 생성할 클래스명 입력

 

- view binding 이용하여 class에 fragment 연결하기

class Restaurant : Fragment() {
    private var mBinding : FragmentRestaurantBinding? = null
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var binding = FragmentRestaurantBinding.inflate(inflater, container, false)
        mBinding = binding
        return mBinding?.root
    }

    override fun onDestroyView() {
        mBinding = null
        super.onDestroyView()
    }
}

- item으로 등록한 fragment들도 같은 방식으로 생성

 

 

 

4. Navigation Graph 생성

res > 마우스 우측버튼 클릭 > New > Adnroid Resource File
file name(nav_graph.xml) 적고, navgation 선택 후 OK
graph를 만들기 위해 fragment 추가

 

- app:startDestination 에 처음 시작시 나타날 fragment 입력, android:name에 각 fragment에 맞는 class입력

<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/nav_graph"
    app:startDestination="@id/restaurantFragment">

    <fragment
        android:id="@+id/shuttleFragment"
        android:name="com.example.navigationtutorial02.fragment.ShuttleFragment"
        android:label="fragment_shuttle"
        tools:layout="@layout/fragment_shuttle" />
    <fragment
        android:id="@+id/restaurantFragment"
        android:name="com.example.navigationtutorial02.fragment.RestaurantFragment"
        android:label="fragment_restaurant"
        tools:layout="@layout/fragment_restaurant" />
    <fragment
        android:id="@+id/dustFragment"
        android:name="com.example.navigationtutorial02.fragment.DustFragment"
        android:label="fragment_dust"
        tools:layout="@layout/fragment_dust" />
</navigation>

 

5. activity_main.xml 에 BottomNavigationView / FragmentContainerView 추가

- FragmentContainerView - android:name 에 androidx.navigation.fragment.NavHostFragment 입력

- BottomNavigationView - app:menu 에 navigation 메뉴로 생성했던 nav_menu를 입력

<?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=".MainActivity"
    android:orientation="vertical"
    android:weightSum="1"
    >

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/main_nav_host"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph"
        />
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/nav_menu"
        />


</LinearLayout>

 

- MainActivity 에 navigation fragment와 controller를 연결 

class MainActivity : AppCompatActivity() {

    private lateinit var mBinding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 메인view에 infalte 바인딩
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mBinding.root)

        // Navigation Fragment 생성
        var navigationFragment = supportFragmentManager.findFragmentById(R.id.main_nav_host) as NavHostFragment
        // Navigation Controller 생성
        var navController = navigationFragment.navController
        
        // Bottom Navigation 메뉴, Navigation Controller 추가
        NavigationUI.setupWithNavController(mBinding.bottomNav, navController)
    }
}

 

==> 컴파일 및 실행

 

github주소 : github.com/powergi-1/navigation_tutorial

- git 저장소 위치 선택

 

VCS -> Import into Version Control -> Create Git Repository...

 

 

- 프로젝트를 선택한뒤 git에 올릴 파일을 추가한다.

 

프로젝트 선택 > 마우스 우측버튼 클릭 > Git > Add

 

 

- commit

 

VCS > Git > Commit Directory...
comment를 달고 commit 클릭

 

 

 

- remote git 에 올리기

 

VCS > Git > Push...

 

 

- 등록 확인

 

github 프로젝트 

 

- Android Studio에 github 정보 저장

(File > Settings > Version Control > GitHub > Add count > github 계정입력)

 

 

 

- 오류가 발생하면 "use token"으로 등록

 

 

 

- github에 로그인하여 설정으로 이동(로그인 > Settings)

 

 

 

- Developer settings 선택

 

 

 

- Personal access tokens > Generate new token 선택

 

 

 

- repo, admin:org, gist 선택 후 Generate token 클릭

 

 

 

- 생성된 토큰을 Android Studio 의 토큰 입력하는곳에 입력하여 github 등록

 

 

 

- 등록 확인

 

 

 

- remote git등록

 

VCS > Git > Remotes...

 

 

- remote git 저장소 정보 입력

VCS > Git > Remotes... > Name / URL 입력 > OK 클릭

 

- 등록된 저장소 확인

 

VCS > Git > Remotes...

 

- res 폴더에 새로운 폴더(anim) 생성

slide_in_left.xml / slide_out_right.xml / slide_in_right.xml / slide_out_left.xml

( * X를 Y로 바꿔주면 위아래로 슬라이드가 적용된다. )

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="250"
    android:fromXDelta="100%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="0%" />
cs
slide_in_left.xml
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="250"
    android:fromXDelta="-100%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="0%" />
cs
slide_in_right.xml
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="250"
    android:fromXDelta="0%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="-100%" />
cs
slide_out_left.xml
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="250"
    android:fromXDelta="0%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="100%" />
cs
slide_out_right.xml

 

- Main Activity에서 slide 사용

overridePendingTransition( 새로 들어올 Activity, 기존 Activity)

1
2
3
4
5
val messageIntent = Intent(this, MessageActivity::class.java)
startActivity(messageIntent)
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right)
finish()
 
cs

- Sub Activity 에서 Slide 사용

1
2
3
4
backBtn.setOnClickListener {
            finish()
            overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_right)
}
cs

 

Ctrl + w + w -> 분할된 화면 이동

Ctrl + w + = -> 분할된 화면의 크기가 동일하도록 조정

] + c -> 차이점이 있는 부분으로 이동 (Down)

[ + c -> 차이점이 있는 부분으로 이동 (Up)

d + o -> 현재 커서가 위치한 창 쪽으로 반대 창 쪽의 내용을 적용 시키기

d + p -> 현재 커서가 위치한 창 쪽의 내용을 반대 창 쪽으로 적용 시키기

z + o (or space) -> 접혀 있는 부분 열기

z + c -> 차이점 없는 부분 접기

:diffupdate -> 문서 간의 차이점을 다시 비교하도록 하는 명령 (한 쪽 창의 내용을 edit하다 보면 문서 간의 차이점을 나타내는 색깔이 없어지기도 함)

[출처] vimdiff 명령어|작성자 똥꾸용


Shell auto completion

Shell                          csh        ksh       bash
Single option completion       Esc-Esc    Esc-Esc   Tab
Unresolved reference menu      Ctrl-D     Esc =     Tab-Tab

설명 하자면
.profile 에

set -o vi

를 넣어주고

ksh:/tmp/>>ls
bin/      bin5/     include/  lib/      share/
bin2/     ftp/      info/     man/      src/
ksh:/tmp/>>

#man directory로 들어간다고 한다면

ksh:/tmp/>>cd m	#까지 치고 Esc + \ 치면

ksh:/tmp/>>cd man/	#자동 완성 됩니다

#이제 bin5로 드어가볼까요^^
ksh:/tmp/>>cd bi       #여기까지 치고 Esc + =
1) bin/
2) bin2/
3) bin5/
ksh:/tmp/>>cd bi	#여기서 \ 누르면
ksh:/tmp/>>cd bin	#이렇게 되구
ksh:/tmp/>>cd bin5	#마지막 단어를 쳐주면 됩니다.

ksh:/tmp//bin2>>

http://lists.q-linux.com/pipermail/ph-linux-newbie/2003-March/013657.htm...

추가로 BASH에서 위방향 버튼, 아래방향 버튼과 같은 역활을 하는 명령어는

Esc 를 누르면 vi 모드로 들어가고
k,j 를 이용하여 사용하면 되겠습니다.

+ Recent posts