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

조회수 1655회

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

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

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

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

좋은하루되세요

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

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.