차근차근/Android

사용자 정의 메뉴 숨기기(??), 보이기(???)

예쁜꽃이피었으면 2014. 10. 17. 15:49

http://motpool.tistory.com/33


몇몇 어플들 보면 단말기의 메뉴버튼을 눌렀을때 보여지는 메뉴 말고, 
화면상에서 메뉴를 감췄다 보여줬다 하는 기능을 사용하더군요.. 
알고보면 별거 아닌데 처음엔 신기했습니다..ㅎㅎ 

    



요렇게 화면 하단에 보이는 메뉴를 한번 누르면 없어지고 귀퉁이에 있는 나타나기(??)를 누르면 다시 보여지고 하는거 말이죠..

참말로 별거 아닌데 궁금해서 구현해 봤습니다..

1. 레이아웃 xml 파일

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     <LinearLayout  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="fill_parent"  
  9.         android:orientation="vertical">  
  10.         <TextView  
  11.             android:layout_width="fill_parent"  
  12.             android:layout_height="wrap_content"  
  13.             android:text="@string/hello" />  
  14.         <ListView  
  15.             android:layout_width="fill_parent"  
  16.             android:layout_height="fill_parent"  
  17.             android:id="@+id/listview1" />  
  18.     </LinearLayout>  
  19.     <LinearLayout  
  20.         android:layout_width="fill_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:orientation="vertical"  
  23.         android:layout_gravity="bottom"  
  24.         android:id="@+id/sublayout">  
  25.         <TextView android:layout_width="wrap_content"  
  26.             android:layout_height="wrap_content"  
  27.             android:background="#dddddd"  
  28.             android:layout_gravity="right"  
  29.             android:text="V 보인다"  
  30.             android:textColor="#000000"  
  31.             android:id="@+id/indTv"/>  
  32.         <LinearLayout  
  33.             android:layout_height="wrap_content"  
  34.             android:layout_width="match_parent"  
  35.             android:id="@+id/hidelayout"  
  36.             android:background="#dddddd">  
  37.             <Button  
  38.                 android:text="Button1"  
  39.                 android:layout_width="wrap_content"  
  40.                 android:layout_height="wrap_content" />  
  41.             <Button  
  42.                 android:text="Button2"  
  43.                 android:layout_width="wrap_content"  
  44.                 android:layout_height="wrap_content" />  
  45.             <Button  
  46.                 android:text="Button3"  
  47.                 android:layout_width="wrap_content"  
  48.                 android:layout_height="wrap_content" />  
  49.             <Button  
  50.                 android:text="Button4"  
  51.                 android:layout_width="wrap_content"  
  52.                 android:layout_height="wrap_content" />  
  53.         </LinearLayout>  
  54.     </LinearLayout>  
  55. </FrameLayout>  



FrameLayout을 사용했습니다.. 하위 View를 겹쳐지도록 하기위해서 사용했습니다..
하위 첫번째 LinearLayout 에는  ListView를 올려놨습니다.. 그냥 결과물이 제대로 나오는지 보려고 한것이니 귀찮으신 분들은 큼지막한 이미지하나 올리셔도 될 것 같아요..
두번째 LinearLayout(id:sublayout)이 나타났다 사라졌다 할 녀석(id:hidelayout)을 감싸고 있는 레이아웃입니다..
두번째 LinearLayout(id:sublayout) 속성 값 중 android:layout_gravity="bottom"으로 해줬습니다.. 
두번째 LinearLayout(id:sublayout)을 부모 레이아웃(FrameLayout) 아래에 위치시키겠다.. 뭐 그런겁니다..

2. Activity 파일
 

  1. package 패키지명  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.ArrayAdapter;  
  10. import android.widget.Button;  
  11. import android.widget.LinearLayout;  
  12. import android.widget.ListView;  
  13. import android.widget.TextView;  
  14.   
  15. public class Anim extends Activity implements OnClickListener{  
  16.     LinearLayout hidelayout, sublayout;  
  17.     TextView indtv;  
  18.     boolean visibility = true;  
  19.       
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.main);  
  24.           
  25.         ArrayList<String> list = new ArrayList<String>();  
  26.         list.add("첫번째");  
  27.         list.add("두번째");  
  28.         list.add("세번째");  
  29.         list.add("네번째");  
  30.         list.add("다섯번째");  
  31.         list.add("여섯번째");  
  32.         list.add("일곱번째");  
  33.         list.add("여덟번째");  
  34.         list.add("아홉번째");  
  35.         list.add("열번째");          
  36.         ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);  
  37.         ((ListView)findViewById(R.id.listview1)).setAdapter(aa);  
  38.           
  39.         indtv = (TextView)findViewById(R.id.indTv);  
  40.                   
  41.         sublayout = (LinearLayout)findViewById(R.id.sublayout);  
  42.         sublayout.setOnClickListener(this);  
  43.         hidelayout = (LinearLayout)findViewById(R.id.hidelayout);  
  44.     }  
  45.           
  46.     @Override  
  47.     public void onClick(View view) {  
  48.         // TODO Auto-generated method stub  
  49.         switch(view.getId()){  
  50.         case R.id.sublayout:  
  51.             visibility = visibility ? false:true;  
  52.             if(visibility){  
  53.                 hidelayout.setVisibility(View.VISIBLE);  
  54.                 indtv.setText("V 보인다");  
  55.             }else{  
  56.                 hidelayout.setVisibility(View.GONE);  
  57.                 indtv.setText("^ 숨었다");  
  58.             }  
  59.             break;  
  60.         }  
  61.     }  
  62. }  



특별해 보일것 없는 코드입니다.. 잉여력 발산을 위해 리스트뷰를 올렸구요..ㅎㅎ
두번째 LinearLayout(id:sublayout)을 터치했을때 이벤트 처리를 해주도록 했습니다..
그 이벤트라는게 별거 아니고  id:hidelayout 를 보여줬다 숨겼다 하는겁니다..

반응형