괴도군의 블로그

[android] 나만의 앱을 만들어보자[2] 화면.. 본문

#프로그래밍/앱 제작강의

[android] 나만의 앱을 만들어보자[2] 화면..

괴도군 2016. 6. 1. 13:58
반응형

먼저 앱 개발하기에 앞서 기획을 살펴봤고..

(정확히는 요구사항분석이 끝나야함)


기능과 화면의 설계가 끝났다면 개발을 시작하도록 합니다.


요즘에 많이보이는 탭 + ViewPager형식으로 예제를 작성해봤습니다.


설명과 첨부파일까지 올립니다.


먼저 실행화면.. (갤럭시 S6 Edge+)




MainActivity.java


package com.test.testapplication; //java파일이 위치한 현재 패키지명(폴더명)
 
//import를 하는이유는 풀경로를 쓰지않기 위함이고.. 정확한 대상을 지정하기 위함이다..(같은이름의 클래스가 생각보다 많다.)
//import를 하지않고 직접 사용시에는 아래의 선언문의 주석을 참고
 
import android.support.v4.view.ViewPager; //support v4에 들어있는 ViewPager를 사용한다.
import android.support.v7.app.AppCompatActivity; // 롤리팝부터는 support v7의 AppCompatActivity를 사용한다.
import android.os.Bundle; //intent 데이터 전달객체
 
import com.astuetz.PagerSlidingTabStrip; //탭
import com.test.testapplication.model.Page; //만든 클래스
 
import java.util.ArrayList;
 
//이름이 메인액티비티일뿐 실제 지정하는곳은 AndroidManifest.xml에서 설정한다.
public class MainActivity extends AppCompatActivity {
 
    //화면들을 저장할 리스트
    private ArrayList<Page> viewList = new ArrayList<>();
 
    //뷰페이저
    private ViewPager pager;
    //화면들을 뿌려주는 어댑터
    private PagerAdapter pagerAdapter;
    //탭
    private PagerSlidingTabStrip tabs;
 
    //import를 안했을 경우 ViewPager 사용법
    private android.support.v4.view.ViewPager test;
 
    /**
     * 접근 제한자란?
     * 멤버변수들은 객체 자신들만의 속성이자 특징이므로 대외적으로 공개되는 것이 결코 좋은 것은 아닙니다.
     * 그런 이유로 프로그래머가 객체의 멤버들에게 접근 제한을 걸 수가 있는데 자바에서는 이를 접근 제한자라 합니다.
     *
     * public      : 모든 접근을 허용
     * protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
     * default    : 같은 패키지(폴더)에 있는 객체들만 허용
     * private    : 현재 객체 내에서만 허용
     *
     */
 
 
    /**
     * 앱이 켜지고 가장 먼저 실행되는 함수
     *
     * @param savedInstanceState onSaveInstanceState()로 상태를 저장하고 다시 파라미터로 전달된다.
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //상속받은 상위클래스의 onCreate()를 호출한다.
        super.onCreate(savedInstanceState);
        //현재 액티비티의 화면을 res/layout/activity_main.xml로 띄운다.
        setContentView(R.layout.activity_main);
 
        //리스트에 보여줄화면과 탭에 표시될 제목을 적는다.
        //풀어서 선언하면 다음과 같다.
        Page page = new Page(this, R.layout.tab1, "첫번째");
        viewList.add(page);
 
        viewList.add(new Page(this, R.layout.tab2, "두번째"));
        viewList.add(new Page(this, R.layout.tab3, "세번째"));
 
        //activity_main에 선언해둔 pager를 찾아서 변수에 연결시켜준다.
        pager = (ViewPager) findViewById(R.id.pager);
        pagerAdapter = new PagerAdapter(this, viewList);
 
        //viewpager를 사용할때는 adapter를 연결시켜줘야한다.
        pager.setAdapter(pagerAdapter);
 
        //탭도 연결시켜준다.
        tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);
    }
 
}
 
cs



PagerAdapter.java

package com.test.testapplication;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import com.test.testapplication.model.Page;
 
import java.util.ArrayList;
 
/**
 * Created by JY-park on 16. 4. 15..
 */
public class PagerAdapter extends android.support.v4.view.PagerAdapter {
 
    LayoutInflater inflater;
    ArrayList<Page> viewlist;
 
    public PagerAdapter(Context context, ArrayList<Page> viewArrayList) {
        inflater = LayoutInflater.from(context);
        viewlist = viewArrayList;
    }
 
    @Override
    public void startUpdate(ViewGroup container) {
        super.startUpdate(container);
    }
 
    @Override
    public CharSequence getPageTitle(int position) {
        return viewlist.get(position).getTitle();
    }
 
    @Override
    public float getPageWidth(int position) {
        return super.getPageWidth(position);
    }
 
    @Override
    public int getCount() {
        return viewlist.size();
    }
 
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = viewlist.get(position).getView();
        //ViewPager에 만들어 낸 View 추가
        container.addView(view);
 
        return view;
    }
 
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View)object);
    }
 
    @Override
    public boolean isViewFromObject(View v, Object obj) {
        return v==obj;
    }
 
}
 
cs



Page.java

package com.test.testapplication.model;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
 
/**
 * Created by JY-park on 16. 6. 1..
 */
public class Page {
 
    private View view;
    private String title;
 
    public Page(Context context, int viewId, String title) {
        this.view = LayoutInflater.from(context).inflate(viewId,null);
        this.title = title;
    }
 
    public View getView() {
        return view;
    }
 
    public void setView(View view) {
        this.view = view;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
}
 
cs



activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
        <com.astuetz.PagerSlidingTabStrip
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="48dip"
            android:background="@drawable/background_tab"
            custom:pstsIndicatorHeight="3dp"
            custom:pstsShouldExpand="true"
            custom:pstsTextAllCaps="false"
            custom:pstsUnderlineHeight="0dp" />
 
        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_below="@+id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="match_parent" />
 
</RelativeLayout>
cs


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.testapplication">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
 
cs



TestApplication.zip


반응형
Comments