">

커스텀 리스트 뷰 만들기 - Chapter 01


  리스트 뷰를 사용하기 위해 기본 프로젝트를 생성한다. 이후 MainActivity 레이아웃 즉, activity_main.xml에 아래와 같이 리스트 뷰를 추가한다. 이 장에서 앞으로 진행할 항목은 다음과 같다. 


Chapter 01

1. 리스트 뷰를 activity_main.xml에 추가한다.

2. 리스트 뷰에 들어갈 각 아이템에 대한 레이아웃을 만든다. 

3. 각 아이템에 대한 데이터를 정의한다. 


Chapter 02 - 클릭하면 이동합니다. 

1. Adapter을 구현한다.

2. MainActivity에 Adapter을 붙인다. 

3. 리스트뷰에 클릭 이벤트를 만들어 본다. 




1. 리스트 뷰를 activity_main.xml에 추가한다. 


[ activity_main.xml ]

<!--?xml version="1.0" encoding="utf-8"?-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.nexthops.myapplication.MainActivity">
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</RelativeLayout>



2. 리스트뷰에 들어갈 각 아이템에 대한 레이아웃을 만든다.

  리스트뷰에 들어갈 각 아이템에 대한 레이아웃을 만듭니다. layout 폴더에서 list_item_layout.xml을 추가합니다.


[ list_item_layout.xml ]

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/appIcon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"/>
    <TextView
        android:id="@+id/appName"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="3dp"
        android:layout_toRightOf="@+id/appIcon"/>
    <TextView
        android:id="@+id/packageName"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/appIcon"
        android:layout_below="@id/appName"/>
</RelativeLayout>



3. 각 아이템에 대한 데이터를 정의합니다. 이 말인 즉, 각 아이템에 대해서 get, set할 수 있도록 정의합니다. 

ListViewItem.java 파일을 하나 생성합니다. 


[ListViewItem.java]

import android.graphics.drawable.Drawable;
public class ListViewItem {
    private Drawable appIconDrawable;
    private String appName;
    private String packageName;

    public Drawable getAppIconDrawable() {
        return appIconDrawable;
    }

    public void setAppIconDrawable(Drawable appIconDrawable) {
        this.appIconDrawable = appIconDrawable;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }


  여기까지 화면을 구성하는 부분은 다 만들어 졌습니다. 다음 챕터에서 adapter과 연결 시켜 실제 리스트 뷰에 생성한 아이템이 나오고, 클릭할 수 있도록 만들어 보겠습니다. 


  페이스북SDK, 카카오톡SDK 등에서 간편 로그인을 등을 사용하기 위해서 반드시 앱에 대한 해시키(Hash key)를 등록해야 합니다. 해시키는 안드로이드 개발 환경에서 가지고 있는 인증서 바이너리에 대한 해시값으로 쉽게 앱 고유의 키 값이라고 생각하면 됩니다. 앱 고유의 값을 사용하기 위해 페이스북이나, 카톡에서 앱의 해시값을 필요로 하는 겁니다. 


  해시키는 개발용 key와 릴리즈용 key로 구분되며 개발용은 개발할 때만 사용하는 키로 본인의 안드로이드 개발 환경에 기본적으로 저장되어 있는 인증서 바이너리에 대한 해시값입니다.

릴리즈용 key는 실제 앱을 배포할 때 사용한 인증서 바이너리에 대한 해시 값입니다. 

카톡이나 페이스북에 사용자 포럼에 가면 배포용은 되는데 릴리즈용은 안된다는 분들이 있습니다. 해시키를 배포용으로 변경하지 않아서 그렇겠죠?


  개발환경이 다른 경우가 많아서 개발 시 해시키를 가져오는 건 코드 상에서 가져오는게 가장 정확한 것 같습니다. 

아래는 그 코드 입니다. 

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_facebook_hash_key);
     try {
            PackageInfo info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (NameNotFoundException e) {
         e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
         e.printStackTrace();
        }
    }
}



두물머리에서 어느 카페를 가지?


두물머리에 가서 산책하며 걷기 전 혹은 데이트를 마치고 돌아가는 길에 가보기 좋은 카페를 하나 소개할까 해요.

두물머리에서 카페를 어디갈지 고민하는 사람들에게 좋은 글이 되길 기대하며...


오늘 소개드릴 카페는 'OMNI라는 카페예요~


카페에서 데이트를 하기에는 은은한 조명과 배경음악 그리고 맛있는 음료가 필수적이겠죠?

OMNI는 이 모든 것을 다 갖춘 카페라고 할 수 있어요~

체인점의 획일화된 디자인이 아닌 개성있는 카페 인테리어도 맘에 들더라구요. 



요즘 유행하는 액자도 딱~ 예쁘죠?

그리고 여기 저기 아기자기하게 소품이 많아서 보는 맛이 있는 것 같아요. 



이제 카페 메뉴를 한번 볼게요!!



이번에 제가 직접 먹어본 음료는 메뉴를 미처 못찍었는데 수제! 블루베리청 아이스라떼와 수제! 딸기청 아이스라떼입니다. 

수제로 청을 담궈서 커피에다 넣었다고 해서 어떤 맛일까 신기해서 먹어봤어요. 

아메리카노나 라떼가 쓰다고 못먹는 분들에게 시럽 대신 달달한 청을 넣은 이 음료 강추 드려요~

단!!! 커피 본연의 맛에 집중하고 싶은 분들은 당연 오리지널로 드시는게 좋겠죠? 



화장실도 깔끔해요!!!



음료, 분위기, 배경음악 이 3박자를 모두 갖춘 카페에서 데이트를 시작하거나 이어나가면 분명 만족스러울거라 생각하여 직접 이용해보고 추천합니다!!!  꼭 한번 가보시길 :)

위치는!!! 경기도 양평군 양서면 두물머리길 24로 우선 검색하시고 자세한 위치는 아래 지도를 참고하시면 되요~


+ Recent posts