노력과 삽질 퇴적물

안드로이드: 사용자 정의 탭뷰 본문

프로그래밍note/언어. JAVA & JDK 계열

안드로이드: 사용자 정의 탭뷰

MTG 2013. 9. 26. 09:49



안드로이드 자체에 기본 탭뷰가 있긴 하지만, 탭뷰 버튼에 추가적인 기능을 넣는게 어렵거나 제약이 많습니다.

버튼과 수평 스크롤을 이용한 수동적인 탭뷰로 구현할수도 있겠지만,

탭뷰의 특성중 '선택중인 버튼 색상 변화'에서 손이 더 가게 되죠.


알려드릴 방법은 XML을 이용해 JAVA코드에서 별도로 터치된 버튼에 맞게 색상이 바뀌게 코드를 작성할 필요가 없습니다.






0. 예시 환경


 IDE

 ADT

 (Build: v22.2.1-833290)

 안드로이드 SDK

 adt-bundle-windows-x86-20130917.zip

 android:minSdkVersion

 10

 Android SDK Build-tools 16






1. 구현


 ① res/drawable/tab_button.xml

-> 터치입력 상태 fa

<?xml version="1.0" encoding="UTF-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">


    <item android:drawable="@drawable/tab_bg" android:state_selected="true"/>

    <item android:drawable="@drawable/tab_bg" android:state_focused="true"/>

    <item android:drawable="@drawable/tab_bg" android:state_pressed="true"/>

    <item android:drawable="@drawable/tab_select"/>


</selector>


 ② res/layout/layout_tab.xml

... ... ...

    <View

        android:id="@+id/custom_tab0"

        android:background="@drawable/tab_button"

        android:layout_width="100dp"

        android:layout_height="50dp" />

... ... ...


 ③ .java

... ... ...

package com.analoggreen.customedtab;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;


public class MainActivity extends Activity implements OnClickListener

{

final static int TAB_SET0 = 0;

final static int TAB_SET1 = 1;

final static int TAB_SET2 = 2;

private int selectedTab;

View set_1;

View set_2;

View set_3;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

selectedTab = -1;

set_1 = findViewById(R.id.custom_tab0);

set_1.setOnClickListener(this);

set_1.setSelected(selectedTab == TAB_SET0);

... ... ...

}


@Override

public void onClick(View v)

{

switch(v.getId())

{

case R.id.custom_tab0 :

setTab(0);

break;

... ... ...

}

}

private void setTab(int tab)

{//해당 함수로 안 넘어오면 탭의 클릭이 유지되지 않는다.

if(selectedTab == tab)

{

return;

}

selectedTab = tab;

set_1 = findViewById(R.id.custom_tab0);

set_1.setSelected(selectedTab == TAB_SET0);

... ... ...

}

}

... ... ...






2. 예제 파일







기타.


혹시나 싶어

android:state_selected="true"등으로 검색하니깐,

아라비안나이트 :: 안드로이드/Android XML Selector 사용 하기

닉스로그 :: android 에서 xml 을 이용해 이미지 전환 효과주기

같은 결과들이 나오는군요.


어떤 코드/방식이건 프로그래머가 응용하기 나름같습니다.