2011-03-23 7 views
5

좋아,이 말은 나를 괴롭힌다. 나는 찾을 수있는 모든 참고 문헌과 예제를 검색해 보았고, 나는 여전히 명백한 것을 놓치고있는 것 같다. 다음은 내가 알아야 할TabActivity에서 탭의 색상 상태/크기 조절?

enter image description here

객체 (보기 또는 드로어 블 내가 무엇입니다 ... (:) 분명하지 일반적으로 빨간색 화살표) 7 일 TV 가이드에 대한 탭이 있습니다 가정)은 Tab 본체의 본체/배경을 구성합니까? (빨간색 화살표로 표시됨) 어떻게 액세스 할 수 있습니까? 아니면 자동으로 상태 색상을 선택한 목록으로 변경합니까? 또한, 표시기 TextView의 상태 색상을 어떻게 알 수 있습니까?

예 : textColor를 정적 회색 (선택한 탭에서 사라진 밝은 흰색 대신)으로 설정했기 때문에 위의 캡처에서 읽을 수 있습니다. 그러나 나는 그것이 자동으로 흰 탭 (선택된)에 검은 색 텍스트가되고 검은 색 바탕에 밝은 흰색 텍스트 (선택되지 않은 것)가되기를 원합니다.

감사의 말씀 감사합니다.

+0

@Matt : 오늘 방금 시도해 보았습니다. 나는 그것을 원하는 방식으로 얻으려면 약간의 작업을해야하지만 내 문제는 해결되었습니다. 현상금으로 부활시켜 줘서 고마워. – Squonk

답변

6

각 탭을 나타내는보기 나는 각 탭 구축이 코드를 사용하고

setIndicator(View) 

사용하여 변경할 수 있습니다 :

View view = buildTabView(this, "Friday"); 
TabHost.TabSpec spec = tabHost.newTabSpec("cat1").setIndicator(view).setContent(intent); 
tabHost.addTab(spec); 

public static LinearLayout buildTabView(Context context, String label){ 
    LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
    final LinearLayout ll = (LinearLayout)li.inflate(R.layout.tab, null); 

    // the following lines will change the tabs size depending on the label (text) length. 
    // the longer tab text - the wider tabs 
    LinearLayout.LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, label.length() + 1); 
    ll.setLayoutParams(layoutParams); 

    final TextView tv = (TextView)ll.findViewById(R.id.tab_tv);   
    tv.setOnTouchListener(new OnTouchListener() {    
     public boolean onTouch(View v, MotionEvent event) { 
      ll.onTouchEvent(event); 
      return false; 
     } 
    }); 

    tv.setText(label);   
    return ll; 
} 

을 그리고 여기 레이아웃/tab.xml

온다
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/tab_bg_selector" 
    android:clickable="true" 
    > 

    <TextView 
    android:id="@+id/tab_tv" 
    android:layout_width="wrap_content" 
    android:layout_height="33dip" 
    android:text="Text 1" 
    android:textStyle="bold" 
    android:textSize="16dip" 
    android:gravity="center" 
    android:textColor="@drawable/tab_color_selector" 
    android:layout_weight="1.0" 
    android:clickable="true" 
    /> 

</LinearLayout> 

LinearLayout에는 배경 선택기 (backround를 변경하려면, 분명히 :)가 있습니다.) 및 텍스트 보기에는 textColor에 선택기가 있습니다 (선택/누를 때 텍스트 색을 변경하는 등). 이렇게하면 탭을 누를 때 텍스트가 검은 색으로 표시되고 그렇지 않은 경우 흰색이 표시 될 수 있습니다.

+0

이것은 재미있어 보입니다. 내 코드가 여전히 베타 버전이므로 기본 동작으로 현재 작업하고 있습니다.이 코드는 필자가 백 버너에 넣는 '외관상의'문제 일뿐입니다. 비록 이것이 작동한다면 그것은 좋을 것입니다. 고마워, 나는 그것을 시험해 볼 것이다. – Squonk

+0

그것은 내 안드로이드 프로젝트에서 작동하기 때문에 작동해야합니다. 내가 오타를 만든 경우를 제외하고) – Kocus

+0

@Kocus - 주로이 코드에 많은 문제가 있습니다. "ViewGroup.LayoutParams (int, int, int) 생성자가 정의되지 않았습니다." – Belgi

2

사용하는 코드로 질문을 친절하게 업데이트합니다. 탭을 애니메이션화하려면 드로어 블 내에서 xml을 사용합니까? 다음은 xml을 사용하는 샘플 탭 조치 샘플입니다.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- When selected, use grey --> 
    <item android:drawable="@drawable/ic_tab_about_grey" 
      android:state_selected="false" /> 
    <!-- When not selected, use white--> 
    <item android:drawable="@drawable/ic_tab_about_color" android:state_selected="true"/> 
</selector> 

이 xml 파일을 사용하여 탭 동작 및 아이콘을 사용자 정의하십시오. 탭 호스트 및 탭 위젯을 정의하는 레이아웃

intent = new Intent().setClass(this, sms.class); 
spec = tabHost.newTabSpec("sms").setIndicator("SMS", 
     res.getDrawable(R.drawable.ic_tab_sms)) 
     .setContent(intent); 
tabHost.addTab(spec); 

이제 XML :

여기 탭이 애니메이션/사용자 정의 옵션을 설정하는 코드입니다.

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
</TabHost> 

고유 한 색, 글꼴 및 구조로이 xml 레이아웃을 사용자 정의하십시오.

관련 문제