마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드에서 뷰 2개 사용하기

0 추천
액티비티에는 기본적으로 한개의 뷰만 생성하는데,

2개의 뷰를 생성해, 한 개의 뷰를 그 위에 표시되게 하는 방법이 없을까요?

아니면 액티비티를 2개 사용해야 되나요?
안드로이드_본좌 (120 포인트) 님이 2013년 2월 18일 질문

4개의 답변

0 추천
fragment를 사용해 보시기 바랍니다
고또 (6,100 포인트) 님이 2013년 2월 18일 답변
부득이 하게 2.2 버전에서 사용해야 되는데 방법이 없을까요?
support library 쓰시면 되요
0 추천

1. 1개의 뷰를 다른 뷰위에 표시하게 한다는 것은 FrameLayout에 두개의 자식뷰를 넣고 visibility를 조정해서 처리할수 있습니다. 사용하는 View의 visibility를 visible로 사용하지 않는 View의 visibility를 invisible혹은 gone으로 처리하면 되죠.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<View
    android:id="@+id/frame1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible"
    />

<View
    android:id="@+id/frame2"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="visible"
    />
   
</FrameLayout>

2.하지만 액티비티처럼 두개가 명확히 다른역할을 하는 구성요소라면 다른 분들이 말씀하신 것처럼 Fragment를 사용하는 것이 코드를 구성하는데 좋습니다. 조금 복잡하긴 하지만 Fragment가 안드로이드 3.0 이상에서는 필수적인 UI 구성요소이므로 활용해보시는것이 좋습니다. 

안드로이드 1.6 에서도 Support Library ( http://developer.android.com/tools/extras/support-library.html )를 통해서 Fragment를 사용하실수 있으니 확인해보시기 바랍니다.

회색 (21,340 포인트) 님이 2013년 2월 19일 답변
회색님이 2013년 2월 19일 수정
0 추천
일단 2가지 방법이 있습니다.

 

첫번째로는 하나의 뷰에 2개의 뷰를 만들어 Visible or Gone을 하는 형태.

두번째로는 Fragment를 이용하는 형태

 

이 두가지 방법이 가장 낫지 않을까 싶습니다.
갈무리 (12,430 포인트) 님이 2013년 2월 19일 답변
0 추천
r = (RelativeLayout) this.getLayoutInflater().inflate( R.layout.overlay_ui, null);
		
		
		ImageView iv = (ImageView) this.findViewById( R.id.imageView1 );
		iv.setOnClickListener( new OnClickListener() {
			private boolean isShow = false;
			
			@Override
			public void onClick(View arg0) {
				if ( isShow ) {
					isShow = false;
					ViewGroup vg = (ViewGroup) arg0.getRootView();
					ViewGroup parent = (ViewGroup) arg0.getParent();
					ViewGroup pparent = (ViewGroup)parent.getParent();
					pparent.removeView( r );
				} else {
					isShow = true;
					ViewGroup vg = (ViewGroup) arg0.getRootView();
					ViewGroup parent = (ViewGroup) arg0.getParent();
					ViewGroup pparent = (ViewGroup)parent.getParent();
					pparent.addView(r);
				}
			}
			
		});

 

이런 식으로 root에 추가하는 방법도 있습니다.

 

마플 (3,720 포인트) 님이 2013년 2월 19일 답변
...