2011-03-23 7 views
5

Tamam, bu beni deli ediyor. Bunlar bilmeniz gerekenlerSekme Renk Durumunu/Boyutunu bir TabActivity'de Denetleme? Ben bulabilirsiniz referanslar ve örnekler tüm aramalara ve ben hala gerçekten belirgin bir şey eksik görünüyor -

enter image description here

nesne (Görünüm veya Drawable I budur ... (:) Açıkçası, normalde kırmızı ok ile) 7 günlük bir TV Rehberi sekmeler şunlardır varsaymak) bir Tab'ın kendisinin ana gövdesini/arka planını oluşturur mu? (kırmızı okla gösterildiği gibi) ve ona nasıl erişebilirim veya durum rengini otomatik olarak seçimim listesine mi geçirmeliyim? Ayrıca, TextView göstergesinin durum rengini nasıl takip edebilirim?

Örnek: Statik gri (yerine seçilmiş sekmede kayboldu parlak beyaz) textColor belirtmiş olduğunuz için yukarıdaki yakalama, bu okunabilir bu. Fakat siyah beyaz sekmede (seçili) ve siyah beyaz parlak metinde (seçilmemiş) otomatik olarak siyah metin olmasını istiyorum.

Tüm yardım minnetle aldı.

+0

@Matt: Ben sadece bugün denemek için zaman buldum. İstediğim şekilde almak için biraz iş yapmalıyım ama problemimi çözdü. Ödülle yeniden dirildiğin için teşekkürler. – Squonk

cevap

6

her sekmeyi temsil görünüm ben her sekmeyi oluşturmak için bu kodu kullanıyorum

setIndicator(View) 

kullanılarak değiştirilebilir:

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; 
} 

Ve burada düzen/tab.xml

geliyor
<?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 öğesinin arka planında (arka planı değiştirmek için, açıkça :)) ve Metin'de bir seçicinin olduğunu unutmayın. Görünüm, textColor'da (seçildiğinde/basıldığında vb. Metin rengini değiştirmek için) bir seçiciye sahiptir. Bu şekilde, sekmeye basıldığında metnin siyah görünmesini sağlayabilirsiniz ve bu olmadığında beyaz olabilir :)

+0

Bu ilginç görünüyor. Şu anda kodum hala beta sürümde olduğu gibi varsayılan davranışı ile çalışıyorum ve bu sadece bir arka yakıcıya koyacağım bir 'kozmetik' meselesi. Bu olsa çalışırsa harika olurdu. Teşekkürler, deneyeceğim. – Squonk

+0

Birkaç android projemde çalıştığı için işe yaramalı. Bir yazım hatası yapmadıkça;) – Kocus

+0

@Kocus - Bu kodla ilgili bir sürü sorun yaşıyorum, temel olarak "The Viewer ViewGroup.LayoutParams (int, int, int) tanımlanmamış" – Belgi

2

Sorunuzu, kullandığınız kodla nazikçe güncelleyin .. Sekmeleri hareketlendirmek için, çiziminizin içinde xml kullanıyor musunuz? Burada xml kullanarak örnek sekmeler eylem işleme.

<?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> 

Özelleştir sekmesi davranışı ve bu xml dosyasını kullanarak simgeler. Sekme-host ve sekme widget'lar tanımlamak için düzeninde

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); 

Şimdi XML:

İşte sekmelerde bu animasyon/özelleştirme seçeneklerini ayarlamak için koddur.

<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> 

Bu xml düzenini kendi renk, yazı tipi ve yapınızla özelleştirin.

İlgili konular