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


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로 하자니, 클릭할 때만 애니메이션이 생길거같고...

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

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

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

좋은하루되세요


조회수 395


Kakao codefestival banner

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 Developer

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

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

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