안드로이드 프래그먼트 선택시 메뉴 글자색 변경
조회수 2207회
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이 바뀌지만.. 뷰페이저로 옆으로 넘겼을시에는 인식이 안되네요. 뷰페이저와 연동하는 방법이 있ㅇ르까요?.. 알 수 없는 사용자 2016.10.25 18:51
- 당장 생각나는 방법으로는 뷰페이저에 OnPageChangeListener 를 추가하여 onPageSelected 에서 셀렉터를 제어하는 방법이 있겠네요. 원하시면 간단한 예제 올려드릴게요 김선우 2016.10.26 17:04
댓글 입력