안녕하세요. 제임스 입니다. 


최근 인스타 및 각종 SNS 에서 난리가났었던 핑크뮬리가 가득한 양주 나리공원에 다녀 왔습니다. 

천일홍, 코드모스, 핑크뮬리, 놈퍼플, 오드리 핑크 등등 잘 아는 꽃 뿐만 아니라 독특한 이름의 꽃들도 많이 있었습니다. 


공원 주차장에 위치한 공원 전망대에서 공원 전체가 이쁘게 잘 보입니다. 

공원 전체가 핑크 핑크 하죠 :)



요즘 인스타그램 및 각종 SNS 에서 아주 핫한 밍크뮬리 속에서 한장!

아쉬운점이 있다면...

많은 분들이 인생샷을 찍기 위해 많이 훼손한 상태라고 합니다. 

군데 군데 꽃들이 뜯겨져 나가고 쓰러져 있는 모습을 보면서 안타까운 마음 금할 길이 없네요.

다음분들을 위해 조금만 더 배려 해주시면 좋을 것 같습니다. 



사랑하는 아내와 핑크 뮬리 속에서 한컷 :)



핑크뮬리 바로 옆에 자리하고 있던 아이들인데 이름을 못봤습니다. ㅠㅠ

사진으로 남기고 보니 나름 멋있네요.




이녀석이 천일홍이었던가??? 

꽃은 좋아 하지만 꽃 이름 몇개 기억 못하는 저인지라... ㅠㅠ

그래도 너무 이뻤고 특히나 아내가 너무 좋아 했습니다 :)

앞으로 자주 시간을 내봐야 겠습니다.



아... 이건 뭐지... -_-

그래도 찍은것 중에 제일 나은 편인지라... ㅠㅠ






좀더 일찍 오지 못한게 아쉬울 정도로 너무 좋았습니다. 

꽃향기 그윽한 공원을 아내와 손잡고 걸으면서 연애하던 시절의 기분도 내봤죠 ^0^


주차 및 입장 자체가 무료여서 부담없이 다녀 올 수 있었습니다. 

저는 주중에 휴무를 내고 다녀 와서 그렇게 사람이 많지는 않았지만 

주말에는 정말 사람 많다고 하니 

다녀가실 계획이 있으신 분들은 

되도록이면 주중을 이용 하시는 것이 좋을 것 같습니다. 



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


최근에 안드로이드 레이아웃에 대한 정리를 하고 있는데요. 

GridLayout 에 대한 내용 정리한 것이 있어 이와 관련하여 GridView 와의 차이점에 해대 정리 해보고자 합니다. 


이름만 보면 참 비슷합니다. 

Grid 라는 공통점이 있으니 실제로 비슷한 기능을 할 것이라는 것 정도는 예상 가능합니다. 

하나는 layout 이고 다른 하나는 view 라고 합니다. 

뭐가 다른 걸까요? 





■ GridView VS GirdLayout 


GirdView 는 2차원 스크롤 격자의 항목을 표시하는 ViewGroup 입니다. 그리드(격자)내 항목들은 해당 뷰와 관련된 ListAdapter 에서 가져 옵니다. 

GirdView 는 ListAdapter 에서 데이터를 가져오므로 메모리에 로드된 데이터만 화면에 표시합니다. GridView 는 ListView 와 같이 더 나은 성능을 위해 자신의 뷰를 재사용하고 재활용합니다. 



GridLayout 은 2차원 격자 무늬 형태의 레이아웃으로 수직, 수평의 라인으로 구성되어 행과 열의 집합 형태로 만들어 지는 레이아웃입니다. 

그리드 라인은 인덱스 (index) 로 참조 되며 좌상단에서 부터 0, 0 좌료값으로 시작하게 됩니다. 

GridLayout 은 안드로이드 API Level 14 에 추가된 레이아웃으로 LinearLayout 과 RelativeLayout 등 다른 레이아웃들의 정렬과 성능문제라는 단점을 보완하기 위해 만들진 레이아웃입니다. 


GridView 와 GridLayout 에 대한 내용을 정리 했는데요. 그럼 차이점을 구체적으로 정리 해보겠습니다. 


1. 화면 스크롤이 가능한가?

GridView (0) / GridLayout (X)

GridView 는 수직방향으로 View 가 넘쳐날 경우 자동 스크롤이 됩니다. 

하지만 GridLayout 은 자동 스크롤이 되지 않습니다. 즉, ScrollView 로 GridLayout 을 감싸지 않는 이상 뷰가 화면 밖으로 나가더라도 스크롤은 불가 합니다. (ScrollView에 대한 내용은 차후 다루도록 하겠습니다.)


2.  Adapter 를 이용하여 데이터를 가져 오는가? 

GridView (0) / GridLayout (X)

GridView 는 화면 구성 시 adapter 를 통하여 데이터를 가져 옵니다. 즉, adapter 를 통하지 않고 다른 데이터를 입력 할 수는 없습니다. 

반대로 GridLayout 은 화면 구조를 정의 하는 것일 뿐 사용자 인터페이스를 구성하는 것은 모두 개발자가 직접 입력을 해야 합니다. 


이상 GridView 와 GridLayout 의 차이점에 대해 정리해봤습니다. 


 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


이번 포스팅은 영상 앞뒤로 간단한 오프닝 및 엔딩을 추가 하는 방법에 대해 안내 하겠습니다. 

지금까지 인코딩을 통한 동영상 저장을 포스팅을 통해 지속적으로 추가 했으나 이제부터는 생략 하도록 하겠습니다. ^^;;

혹, 작업한 동영상 저장 하는 법이 필요하신 분들께서는 앞서 작성한 내용을 찾고 부탁 드립니다. 


■ 다음팟 인코더 동영상 편집 - 동영상 오프닝 & 엔딩


1. 다음팟 인코더를 실행하여 동영상편집 TAB -> +불러오기 버튼을 차례로 클릭하여 원하는 영상을 목록에 추가 합니다. 

다음팟 인코더가 없으시면 아래 링크를 클릭하여 제가 첨부한 파일을 다운받아 설치 하시면 됩니다. 

☞ 다음팟 인코더 다운로드 받으로 가기



2. 작업할 영상을 타임라인에 추가 합니다. 


3. 오프닝 TAB을 클릭하여 오프닝 작업 화면으로 이동 후 추가할 텍스트를 입력 합니다. 


4. 배경 도 선택 가능합니다. 


5. 적용 버튼을 클릭하면 아래와 같이 오프닝 영상이 추가 된것을 확인 하실 수 있습니다. 


6. 엔딩 TAB 을 클릭하고 엔딩에 들어갈 텍스트 입력 및 배경 선택 후 적용을 클릭 하면 아래와 같이 엔딩 화면이 구성 됩니다. 


작업이 끝나면 인코딩을 통해 동영상 저장을 하시면 됩니다 :)




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


이번 포스팅에서는 다음 팟 인코더를 이용하여 동영상에 자막 추가 하는 방법에 대해 설명 드리겠습니다. 


■ 다음팟 인코더 동영상 편집 - 동영상 자막넣기


1. 편집 작업을 할 영상을 준비 합니다. 

이번에는 안드로이드 8.0 오레오 안내 영상을 이용 했습니다. 


2. 다음팟 인코더를 실행 시키고 동영상 편집 TAB -> +불러오기를 선택하여 위에 준비한 영상을 목록에 추가 합니다.

다음팟 인코더가 없으시면 아래 링크를 클릭하여 제가 첨부한 파일을 다운받아 설치 하시면 됩니다. 

☞ 다음팟 인코더 다운로드 받으로 가기




3. 목록에 추가된 영상을 타임라인으로 끌어 놓기 합니다. 


4. 텍스트 TAB 를 클릭 하여 자막입력 화면으로 전환하고 자막을 추가 합니다. 

저는 간단히 "다음팟인코더 자막넣기" 라고 입력 했습니다. 


5. 텍스트 컬러 및 자막 배경화면 컬러도 지정할 수 있습니다. 


6. 자막 위치를 설정해 줍니다. 


7. 적용 버튼을 클릭하여 자막 추가 작업을 완료 합니다. 


8. 자막 추가된 영상을 인코딩 하여 동영상으로 저장합니다. 


9. 완료 되면 폴더열기를 통해 작업한 영상을 확인 합니다. 


10. 샘플 작업으로 만든 영상으로 플레이 중인 화면입니다.



생각보다 너무 간단합니다 ^^ 영상 작업에 도움 되시길 빌어 봅니다 :)



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


이번 포스팅은 다음팟인코더 동영상 편집 중 동여상 붙이기 기능에 대해 설명 드리겠습니다. 

앞번에 동영상 자르기를 했는데요. 붙이기는 너무 간단해서... 설명 드린다고 하기도 부끄럽습니다 ^^;


■ 다음팟 인코더 동영상 편집 - 동영상 붙이기


1. 편집 작업을 통해 붙이기 할 영상을 준비 합니다. 저는 안드로이드 8.0 오레오 소개 영상과 바로 앞번에 동영상 자르기 방식으로 준비한 아이유 동영상 두개를 준비 했습니다. 



2. 다음팟 인코더를 실행 시키고 동영상 편집 TAB -> +불러오기를 선택하여 위에 준비한 영상 두개를 모두 목록에 추가 합니다. 


3. 추가한 영상을 아래 타임라인에 끌어놓기(Drag & Drop) 합니다. 이때 중요한건 먼저 나올 영상을 먼저 추가 하고 뒤에 붙이기 할 영상을 타임라인상 추가된 영상 뒤쪽에 끌어놓기 하시면 됩니다. 


4. 타임라인에 원하는 순서대로 영상이 등록된것을 확인 후 인코딩 시작 버튼을 클릭하여 영상 저장을 시작합니다.


5. 동영상 저장 프로세스 진행중입니다. 


6. 동영상 저장이 완료 되어 알림 팝업이 보여집니다. 폴더열기를 클릭하여 완성된 동영상을 확인합니다. 


7. 동영상 자르기때 만든 아이유 영상 옆에 동영상 붙이기로 만든 영상이 보입니다. 물론 실행해 보시면 영상이 잘 붙어 서 나오는걸 확인 하실수 있습니다. 



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


이번 포스팅은 다음팟인코더 동영상 편집 중 동영상 자르기 기능에 대해 설명 드리겠습니다. 

이 포스팅을 보시고 나면 동영상 자르는 방법 정말 간단하게 하실수 있습니다. 



■ 다음팟 인코더 동영상 편집 - 동영상 자르기


1. 편집 작업을 할 영상을 준비 합니다. 

저는 최근들어 많이 듣고 있는 아이유의 어젯밤 이야기 동영상을 youtube 를 통해 준비 했습니다. 


2. 다음팟 인코더를 실행하여 동영상편집 TAB -> +불러오기 버튼을 차례로 클릭하여 원하는 영상을 목록에 추가 합니다. 

다음팟 인코더가 없으시면 아래 링크를 클릭하여 제가 첨부한 파일을 다운받아 설치 하시면 됩니다. 

☞ 다음팟 인코더 다운로드 받으로 가기




3. 영상이 추가 되면 목록에서 영상프리뷰 영역으로 끌어놓기 (Drag & Drop)을 시전합니다. 

끌어놓기를 하시면 영상이 자동으로 플레이되니 아래 그림과 같이 정지 버튼을 클릭해서 영상을 정지 시켜 주세요.


4. 시작 및 끝 이라는 버튼이 보이는데요. 이것들을 각각 한번씩 클릭해주시면 아래 이미지와 같이 노란색 삼각형 이미지가 표시됩니다. 


5. 왼쪽 노란색 삼각형을 잘라내기 한후 영상의 시작이 될 부분으로 이동 합니다. 

동일하게 오른쪽 노란색 삼각형을 잘라내기 후 영상의 마지막 부분으로 이동 합니다. 


6. 위치 설정이 끝나면 아래와 같이 삽입 버튼을 클릭하여 타임라인에 원하는 잘라내기한 영상을 추가 합니다. 

타임라인에 영상이 추가 되면 인코딩 시작 버튼을 클릭하여 인코딩 진행을 합니다. 


7. 인코딩 시작 시 아래와 같이 인코딩과 함께 영상 저장을 진행하게 됩니다. 


8. 완료되면 동영상 저장이 완료 되었다는 안내 메세지가 뜹니다. 

폴더열기를 클릭하여 영상이 제대로 저장 되었는지 확인 해야겠죠? 


9. 잘라내기하여 인코딩한 영상이 이쁘게 저장되어 있습니다. 

물론 영상 재생을 해보셔도 당연히 원하시던 결과를 얻으실수 있으리라 생각합니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스입니다. 


우리가 동영상 하면 youtube 를 꼽을 만큼 방대한 영상들이 youtube 에 있습니다. 

저만 하더라도 하루에 한시간 이상은 youtube 의 영상들을 보고 있습니다. 

그런데 정말 내가 소장하고 싶은 영상들이 있을때 이때 영상을 다운 받고 싶은 경우 많이들 있으실 거예요.


이번에는 이 youtube 동영상을 다운 받을 수 있는 방법을 간략시 정리해 보겠습니다. 


■ YouTube 에서 동영상 다운받기


1. Youtube 에서 원하는 영상을 검색

저는 개인적으로 제 딸아이 자장가를 많이 이용하여 youtube 에서 자장가를 키워드로 검색 했습니다. 



2. 주소창의 www. 다음에 오는 youtube 바로앞에 ss 입력

영상 다운로드를 위해서는 www. 다음 즉 youtube 앞에 ss 를 입력해 주면 됩니다. 

예를 들어 www.youtube.com/jamesdreaming 라는 링크의 영상이라면 www.ssyoutube.com/jamesdreaming 과 같이 입력 해주시면 됩니다. 


위 주소창에 아래와 같이 youtube 앞에 ss 를 추가



3. 영상 다운로드 진행하기

잠시간의 로딩 후 영상 다운로드 페이지로 진입하게 됩니다. 아래 이미지와 같이 download video in browser 라는 링크를 클릭 하시면 됩니다. 



4. 다운로드할 영상 사이즈 선택

다운로드 할 영상의 사이즈를 선택 합니다. 저는 MP4 720 으로 선택하여 진행 했습니다. 



5. 다운로드 완료 창 확인

제가 메인으로 사용하고 있는 크롬 기준으로 아래 화면과 같이 아래쪽에 파일 다운로드가 완료 된 것이 보입니다. 



6. 다운로드 파일 확인 및 실행

다운로드 된 파일을 확인하고 실행 해보시면 youtube 상에서 보던 영상이 나의 PC 속으로 쏙 들어 와 있다는 것을 아실수 있을거예요 :)



별거 없는.... 

정말 간단한 팁이었습니다 :)



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스입니다. 


이번에는 TableLayotu 에 관한 내용을 포스팅해 보겠습니다. 

어떻게보면 바로 앞번에 포스팅한 GridLayout 과 정말 유사한 형태 입니다. 

(GridLayout 포스팅을 보시면 여기를 클릭해 주세요)


■ TableLayout 이란?

TableLayout 은 행(row)과 열(column)으로 구성되는 테이블 형태로 화면을 구성하는 레이아웃을 말합니다. 

TableLayout 의 각 행은 TableRow 인스턴스가 사용하며 이 TableRow 인스턴스는 하나의 자식뷰를 가지는 셀(cell)로 구성됩니다. 


java.lang.Object

↳ android.view.View

↳ android.view.ViewGroup

↳ android.widget.LinearLayout

↳ android.widget.TableLayout


■ TableLayout 속성

TableLayout 의 속성에 대해 알아 보겠습니다. 


◎ 부모뷰에서 사용하는 속성

collapseColumns : 지정 컬럼을 제거

shrinkColumns : 지정 컬럼 자동 축소

stretchColumns : 지정 컬럼 자동 확장


위 세가지 정도가 API 상에 존재하는 TableLayout 입니다. 


◎ 자식뷰에서 사용하는 속성

layout_column : 자식뷰가 위치할 컬럼의 index 값 지정 (0: 첫번째, 1: 두번째, 2: 세번째....)

layout_span : 자식뷰가 차지할 셀의 수를 지정 (예: 2로 지정시 두칸을 차지)


그외 기본적으로 View 가 가지는 속성들은 거의 대부분 사용 할 수 있습니다. 



■ TableLayout 예제


이제 예제를 통해 TableLayout 을 만나 보겠습니다. 




위 이미지와 같이 3x5 사이즈의 테이블을 생성 했습니다. 

작업은 아래와 같은 방법으로 진행 합니다. 



 자식뷰 개발 예


첫번째 라인은 TextView 1 과 TextView 2 가 나란히 배치 되어 있습니다. 

<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#75ccdf"
>
<TextView
android:text="TextView 1"
android:background="#82eb92"
android:padding="5dp"
/>
<TextView
android:text="TextView 2"
android:background="#95ad5d"
android:padding="5dp"
/>
</TableRow>

하나의 row 구성은 TableRow 로 선언하고 그 안에 자식뷰를 추가 하는 만큼 셀을 생성하게 되는데요. 여기서는 TableRow 안에 두개의 TextView 가 존재하여 한 row 에 두개의 셀(cell) 이 존재 합니다. 



두번째 라인은 TextView3 이 두 컬럼을 차지하도록 했습니다. 

<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#9e6dcf"
>
<TextView
android:text="TextView 3"
android:layout_span="2"
android:background="#78dab1"
android:padding="5dp"/>
</TableRow>

TextViewlayout_span2로 설정하여 두자리를 차지 하도록 배치했습니다. 



세번째 라인은 TextView4 를 세번째 컬럼에 위치 시켰습니다. 

<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#cf756d"
>
<TextView
android:layout_column="2"
android:text="TextView 4"
android:background="#e6da7f"
android:padding="5dp"/>
</TableRow>

TextView 에 layout_column 값을 2로 지정하여 세번째 컬럼에 위치하도록 배치합니다. 

(위치지정은 0 이 첫번째, 1 이 두번째, 2가 세번째... 입니다)



네번째 라인은 TextView5, 6, 7 세개의 자식뷰를 모두 추가 했습니다. 

<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#ebeb73"
>
<TextView
android:text="TextView 5"
android:background="#cf6da6"
android:padding="5dp"/>
<TextView
android:text="TextView 6"
android:background="#9e6dcf"
android:padding="5dp"/>
<TextView
android:text="TextView 7"
android:background="#6dcf8c"
android:padding="5dp"/>
</TableRow>

첫번째 라인과 별 차이 없이 TableRow 에 자식뷰로 TextView 를 하나 더 추가 했습니다.



다섯번째 라인은 TextView8 을 정중아에 위치 시켜보겠습니다. 

<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#6d75cf"
>
<TextView
android:layout_column="1"
android:text="TextView 8"
android:background="#cfa56d"
android:padding="5dp"/>
</TableRow>

TextView 에 layout_column 을 1로 지정하여 두번째 컬럼에 위치하도록 했습니다. 



 부모뷰 개발 예


부모뷰에서 사용하는 세가지 속성 값 기억 하시나요? 


collapseColumns : 지정 컬럼을 제거

shrinkColumns : 지정 컬럼 자동 축소

stretchColumns : 지정 컬럼 자동 확장


위 속성 값들은 " , "(콤마) 를 이용하여 컬럼 값을 추가 할 수 있습니다. 


하나 하나 살펴 보겠습니다. 


collapseColumns 에 제거하기 원하는 컬럼 값으로 1 을 설정해봤습니다. 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#b6e686"
android:layout_margin="10dp"
android:collapseColumns="1"
>

컬럼 index 가 1인 두번째 컬럼에 있던 자식뷰들이 모두 제거 되었습니다. 

여기서 참고 할 점은 TextView3 의 경우 0번과 1번 모두 차지하고 있던 자식뷰 였으나 1번 인덱스에 포함되어 삭제 되었습니다. 



collapseColumns 값을 " , " 를 이용하여 1 과 2 두개값을 지정하여 두번째, 세번째 컬럼을 제거 했습니다. 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#b6e686"
android:layout_margin="10dp"
android:collapseColumns="1, 2"
>




stretchColumns에 자동 확장하고자 하는 컬럼 index 값으로 1을 지정해봤습니다.  

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#b6e686"
android:layout_margin="10dp"
android:stretchColumns="1"
>

index 가 1인 두번재 컬럼이 확장 된 것을 확인 하실 수 있습니다. 



stretchColumns 값을 " , " 를 이용하여 1, 2 를 모두 확장하도록 설정 했습니다. 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#b6e686"
android:layout_margin="10dp"
android:stretchColumns="1, 2"
>



stretchColumns 값을 " , " 를 이용하여 0, 1, 2 를 모두 확장하도록 설정 했습니다. 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#b6e686"
android:layout_margin="10dp"
android:stretchColumns="0, 1, 2"
>

단 위와 같이 모든 컬럼을 지정 할 경우 " , " 를 사용하여 각각 입력 하지 않고 아래 코드와 같이 " * " 를 이용하면 편합니다. 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#b6e686"
android:layout_margin="10dp"
android:stretchColumns="*"
>



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


이번에는 안드로이드에서 LinearLayout 과 함께 가장 많이 사용되고 있는 RelativeLayout 에 대해 정리해 보겠습니다. 


■ Relativelayout 란?


뷰들을 상대적인 위치 정보를 설정하여 배치 시키는 형태 입니다. 

java.lang.Object

↳ android.view.View

↳ android.view.ViewGroup

android.widget.RelativeLayout


■ RelativeLayout 속성

RelativeLayout 에는 많은 속성 값들이 존재 합니다. 


◎ 부모 컨테이너를 기준으로 설정하는 속성 목록


layout_alignParentBottom : 부모 컨테이너의 아래쪽과 뷰의 아래쪽을 맞춤

layout_alignParentEnd : 부모 컨테이너의 끝과 뷰의 끝을 맞춤 (오른쪽 끝)

layout_alignParentLeft : 부모 컨테이너의 왼쪽 끝과 뷰의 왼쪽 끝을 맞춤

layout_alignParentRight : 부모 컨테이너의 오른쪽 끝과 뷰의 오른쪽 끝을 맞춤

layout_alignParentStart : 부모 컨테이너의 시작점을 뷰의 시작점에 맞춤 (왼쪽 끝)

layout_alignParentTop : 부모 컨테이너의 상단 끝과 뷰의 상단 끝을 맞춤

layout_centerHorizontal : 부모 컨테이너의 수평방향 중간에 맞춤

layout_centerVertical : 부모 컨테이너의 수직방향 중간에 맞춤

layout_centerInParent : 부모 컨테이너의 수직 & 수평 중간에 맞춤 (정중앙에 위치)



◎ id 값으로 지정한 뷰 기준으로 설정하는 속성 목록


layout_above : 지정한 뷰의 위쪽에 위치 시킴

layout_alignBaseline : 지정한 뷰와 내용물의 아래쪽 기준선에 맞춤

layout_alignBottom : 지정한 뷰의 아래쪽과 맞춤

layout_alignEnd : 지정한 뷰의 끝에 맞춤

layout_alignLeft : 지정한 뷰의 왼쪽에 맞춤

layout_alignRight : 지정한 뷰의 오른쪽에 맞춤

layout_alignStart : 지정한 뷰의 시작점에 맞춤

layout_alignTop : 지정한 뷰의 상단에 맞춤

layout_below : 지정한 뷰의 아래쪽에 위치 시킴

layout_toLeftOf : 지정한 뷰의 왼쪽에 위치 시킴

layout_toRightOf : 지정한 뷰의 오른쪽에 위치 시킴


위 목록들이 자주 사용하는 속성값들입니다. 

위 값들만 적절히 잘 사용해 주시면 거의 모든 레이아웃 구성도 가능합니다. 



■ 부모 컨테이너를 기준으로 설정하는 속성 예제 


가장 위에 있는 민트색 바탕의 사각형에 속성01 부터 속성07 까지 사각형이 배치되어 있습니다. 



속성01 

- 어떠한 속성 값도 지정하지 않은 기본 상태로 RelativeLayout 내에서 좌측상단에 위치하게 됩니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#933c3c"
android:text="속성01"/>


속성02 

- layout_alignParentRight 속성을 true 로 지정하여 부모 컨테이너의 오른쪽 끝에 위치하게 했습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#ce5d24"
android:text="속성02"
android:layout_alignParentRight="true"
/>


속성03

- layout_alignParentBottom 속성을 true 로 지정하여 부모 컨테이너의 가장 아래쪽에 위치하게 했습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#980cd9"
android:text="속성03"
android:layout_alignParentBottom="true"
/>


속성04

- layout_alignParentRight 속성 및 layout_alignParentBottom 속성을 true 로 지정하여 부모 컨테이너의 우측하단에 위치하게 했습니다.

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#f9f902"
android:text="속성04"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>


속성05

- layout_centerHorizontal 속성을 true 로 지정하여 부모 컨테이너의 수평방향으로 중앙에 위치하게 했습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#d52d9a"
android:text="속성05"
android:layout_centerHorizontal="true"
/>


속성06

- layout_centerVertical 속성을 true 로 지정하여 부모 컨테이너의 수직방향으로 중앙에 위치하게 했습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#abf902"
android:text="속성06"
android:layout_centerVertical="true"
/>


속성07

- layout_centerInParent 속성을 true 로 지정하여 부모 컨테이너의 수직방향 및 수평방향 모두 중앙에 위치하게 했습니다. (정중앙 위치)

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#e7110a"
android:text="속성07"
android:layout_centerInParent="true"
/>



■ id 값으로 지정한 뷰를 기준으로 설정하는 속성 예제 




아래쪽 하늘색 큰 사각형은 상단의 민트색 사각형을 기준으로 layout_below 지정하여 마진 5dp 를 준 상태입니다. 

이번 화면에서는 속성07 의 붉은색 사각형을 기준으로 속성값을 지정 했습니다. 


속성07

- layout_centerInParent 값을 true 로 지정하여 부모 컨테이너의 정중앙에 배치 시켰습니다. 

- id 값을 tv_07 로 지정하여 다른 뷰들이 속성07을 기준으로 자리 배치를 하도록 합니다. 

<TextView
android:id="@+id/tv_07"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#e7110a"
android:text="속성07"
android:layout_centerInParent="true"
/>


속성08-1

- layout_toLeftOf 속성을 속성07의 id 값 기준으로 지정하여 속성07의 바로 왼쪽에 위치하고 있습니다. 

- 수직방향으로의 속성값을 지정하지 않았으므로 default 값으로 상단에 붙어 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#0ae733"
android:text="속성08-1"
android:layout_toLeftOf="@id/tv_07"
/>


속성08-2

- layout_toLeftOf 속성을 속성07 기준으로 지정하여 속성07의 바로 왼쪽에 위치하고 있습니다. 

- layout_alignTop 속성을 속성07 기준으로 지정하여 속성07의 상단과 속성08-2의 상단을 같은 위치에 배치 했습니다. 

- 속성08-2 의 높이가 길어 속성07 보다 아래쪽으로 밀려 난것을 확인하실 수 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#0ae733"
android:text="속성08-2"
android:layout_toLeftOf="@id/tv_07"
android:layout_alignTop="@id/tv_07"
/>


속성09-1

- layout_toRightOf 속성을 주고 속성07의 바로 오른쪽에 위치하고 있습니다. 

- 수직방향으로의 속성값을 지정하지 않았으므로 default 값으로 상단에 붙어 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#b0e70a"
android:text="속성09-1"
android:layout_toRightOf="@id/tv_07"
/>


속성09-2

- layout_toRightOf 속성을 주고 속성07의 바로 오른쪽에 위치하고 있습니다. 

- layout_alignBottom 속성값을 지정하여 속성07의 한단과 속성09-2의 하단을 같은 위치에 배치 했습니다. 

- 속성09-2 의 높이가 길어 속성07보다 위로 치솟아 오른것을 확인 하실 수 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#b0e70a"
android:text="속성09-2"
android:layout_toRightOf="@id/tv_07"
android:layout_alignBottom="@id/tv_07"
/>


속성10-1

- layout_above 속성을 주고 속성07의 바로 위에 위치하고 있습니다. 

- 수평방향으로의 속성값을 지정하지 않았으므로 default 값으로 좌측에 붙어 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#955ed9"
android:text="속성10-1"
android:layout_above="@id/tv_07"
/>


속성10-2

- layout_above 속성을 주고 속성07의 바로 위에 위치하고 있습니다. 

- layout_alignRight 속성값을 지정하여 속성07의 오른쪽 끝과 속성10-2의 오른쪽 끝을 일치 시켰습니다. 

- 속성10-2 의 길이가 길어 속성07의 좌측으로 벗어나 있는 것을 확인 하실 수 있습니다.  

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#955ed9"
android:text="속성10-2"
android:layout_above="@id/tv_07"
android:layout_alignRight="@id/tv_07"
/>


속성11-1

- layout_below 속성을 주고 속성07의 바로 아래에 위치하고 있습니다. 

- 수평방향으로의 속성값을 지정하지 않았으므로 default 값으로 좌측에 붙어 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#d58a65"
android:text="속성11-1"
android:layout_below="@id/tv_07"
/>


속성11-2

- layout_below 속성을 주고 속성07의 바로 아래에 위치하고 있습니다. 

- layout_alignLeft 속성을 지정하여 속성07의 좌측끝에 속성11-2의 좌측 끝을 일치 시켰습니다.

- 속성11-2 의 길이가 길어 속성07의 우측으로 벗어나 있는 것을 확인 하실 수 있습니다. 

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#d58a65"
android:text="속성11-2"
android:layout_below="@id/tv_07"
android:layout_alignLeft="@id/tv_07"
/>





아래는 이번 예제를 위해 작성한 전체 레이아웃 입니다. 



아래는 위 레이아웃을 구성하기 위해 작성한 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="match_parent"
tools:context="com.tutorial.james.tutorial_linearlayout.MainActivity"
>

<RelativeLayout
android:id="@+id/rl_top"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#11cc99"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#933c3c"
android:text="속성01"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#ce5d24"
android:text="속성02"
android:layout_alignParentRight="true"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#980cd9"
android:text="속성03"
android:layout_alignParentBottom="true"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#f9f902"
android:text="속성04"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#d52d9a"
android:text="속성05"
android:layout_centerHorizontal="true"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#abf902"
android:text="속성06"
android:layout_centerVertical="true"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#e7110a"
android:text="속성07"
android:layout_centerInParent="true"
/>

</RelativeLayout>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#7ee3ef"
android:layout_below="@id/rl_top"
android:layout_margin="5dp"
>

<TextView
android:id="@+id/tv_07"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#e7110a"
android:text="속성07"
android:layout_centerInParent="true"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#0ae733"
android:text="속성08-1"
android:layout_toLeftOf="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#0ae733"
android:text="속성08-2"
android:layout_toLeftOf="@id/tv_07"
android:layout_alignTop="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#b0e70a"
android:text="속성09-1"
android:layout_toRightOf="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:padding="10dp"
android:background="#b0e70a"
android:text="속성09-2"
android:layout_toRightOf="@id/tv_07"
android:layout_alignBottom="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#955ed9"
android:text="속성10-1"
android:layout_above="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#955ed9"
android:text="속성10-2"
android:layout_above="@id/tv_07"
android:layout_alignRight="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#d58a65"
android:text="속성11-1"
android:layout_below="@id/tv_07"
/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#d58a65"
android:text="속성11-2"
android:layout_below="@id/tv_07"
android:layout_alignLeft="@id/tv_07"
/>

</RelativeLayout>

</RelativeLayout>

참고로 android:text 값을 하드코딩으로 입력 한것이 보이실 겁니다. 

이는 레이아웃 구조 설명을 위해 입력한 방식입니다. 

string.xml 에 문장을 지정하고 해당 id 값을 호출하여 사용하는 방식을 사용하는 것을 권해 드립니다. 

참고하세요 :)



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


자바스크립트에서 문자를 숫자로 변환하는 방법에대해 정리 해보겠습니다. 


■ parseInt() 함수 


가장 많이 사용하는 함수 중 하나가 바로 parseInt() 함수 입니다. 

var a = parseInt("10");
var b = parseInt("10.00");
var c = parseInt("10.99");
var d = parseInt("12 34 56");
var e = parseInt(" 77 ");
var f = parseInt("26 years");
var g = parseInt("She was 26");

위와 같이 사용 가능합니다. 

결과는 아래와 같습니다. 


a = 10

b = 10 (소숫점 이하는 버립니다)

c = 10 (소숫점 이하는 버립니다)

d = 12 (첫번째 숫자 변환 가능 문자 이후 띄워쓰기 이후는 버립니다)

e = 77 (띄워쓰기 무시하고 숫자 변환 가능 문자를 변환합니다)

f = 26 (문자는 무시합니다)

g = NaN (문자로 시작된 경우 변환 할 수 없습니다)



■ Number() 함수


parseInt() 함수와 함께 가장 많이 사용되는 함수 입니다. 

var a = Number("10");
var b = Number("12 34 56");

결과는 아래와 같습니다. 


a = 10

b = NaN


b 의 결과 값이 parseInt() 함수를 사용했을때와 다릅니다. 

Number() 함수는 parseInt() 함수와 달리 입력받은 값 자체를 숫자로 변환 할 수 없을 경우 NaN 으로 반환하게 만들어 졌습니다. 


즉, 10 은 숫자로 변환 가능 하므로 parseInt() 를 사용했을때와 동일한 값을 반환 했지만

"12 34 56"의 경우 중간에 문자로 취급되는 스페이스가 들어 가면서 전체값이 숫자가 아닌 문자열로 인식되어 버려 변환할수 없게 된 경우 입니다. 


Number() 함수는 parseInt() 함수와 다르게 true / false 값의 변환도 가능합니다. 

var c = Number(true);
var d = Number(false);

결과는 아래와 같습니다. 


c = 1

d = 0



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,