안드로이드 프래그먼트 선택시 메뉴 글자색 변경


https://github.com/neokree/MaterialTabs

제가 구현하고자 하는것은 자주 쓰이는 라이브러리 Materialtabs와 같습니다.

라이브러리 갖다 쓰면 편하겠지만 직접 구현해보는 것도 공부가 될까싶어 해보려합니다.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button btn[] = new Button[4];
    ViewPager viewPager = null;
    Thread thread = null;
    Handler handler = null;
    int p=0;    //페이지번호
    int v=1;    //화면 전환 뱡향

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //viewPager
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        MyViewPagerAdapter adapter = new MyViewPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(adapter);

        btn[0] = (Button)findViewById(R.id.btn_a);
        btn[1] = (Button)findViewById(R.id.btn_b);
        btn[2] = (Button)findViewById(R.id.btn_c);
        btn[3] = (Button)findViewById(R.id.btn_d);

        for(int i=0;i<btn.length; i++){
            btn[i].setOnClickListener(this);
        }
    }


    @Override
    public void onClick(View v) {

        switch(v.getId()){
            case R.id.btn_a:
                viewPager.setCurrentItem(0);
                Toast.makeText(this,"A버튼", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_b:
                viewPager.setCurrentItem(1);
                Toast.makeText(this,"B버튼", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_c:
                viewPager.setCurrentItem(2);
                Toast.makeText(this,"C버튼", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_d:
                viewPager.setCurrentItem(3);
                break;
            default:
                break;

        }

    }
}

프래그먼트와 뷰페이저를 이용하여 간단한 메뉴를 구현했습니다.

그런데 상용 어플들을 보면, 해당 프래그먼트에 진입시 글자색이 바뀌는 등 표시가 있지않습니까?

이것을 구현하려하는데 잘 감이 잡히지가 않습니다.

애니메이션을 이용해야될것같긴한데, "해당 프래그먼트에 진입한 그 상태를 어떻게 체크하는지"가

궁금합니다. setOnClickListener로 하자니, 클릭할 때만 애니메이션이 생길거같고...

공부하는 학생이라 안드로이드 많은걸 알지는 못합니다.

시간이 오래걸리거나 꽤나 어려운거라면

과감히 라이브러리 쓰라고 말씀해주시면 감사하겠습니다

좋은하루되세요


조회수 100


1 답변


저는 예전에 TabLayout, ViewPager, Fragment 를 사용했었던 기억이 있네요.

위와 같은 방법으로 하시려면, 버튼이 메뉴(탭)가 될 거 같은데요.

버튼에 selector 를 활용하여 특정 이벤트 시 drawble 만 바꿔주면 될 것 같아요.

아래는 안드로이드 레퍼런스 문서에서 가져왔습니다.

아, 프래그먼트에도 액티비티와 같이 생명주기가 있어서 진입 상태 확인 가능합니다.

XML file saved at res/drawable/button.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

This layout XML applies the state list drawable to a Button:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
  • 2016년 10월 25일에 작성됨
    Software Engineer

  • 답변감사합니다.. 이렇게 했을경우 탭을 터치했을 때는 selected상태 변화로 drawble이 바뀌지만.. 뷰페이저로 옆으로 넘겼을시에는 인식이 안되네요. 뷰페이저와 연동하는 방법이 있ㅇ르까요?..    Jun Yong Lee   2016.10.25 18:51     
  • 당장 생각나는 방법으로는 뷰페이저에 OnPageChangeListener 를 추가하여 onPageSelected 에서 셀렉터를 제어하는 방법이 있겠네요. 원하시면 간단한 예제 올려드릴게요    김선우   2016.10.26 17:04     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close