2017-08-25 1 views
1

Ich habe einen TabLayout in meiner app und es hält benutzerdefinierte Ansichten:android - TabLayout dynamisch die Größe

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:orientation="horizontal"> 

     <com.myproject.app.utils.commons.IconImageView 
      android:id="@android:id/icon" 
      android:layout_width="wrap_content" 
      android:layout_height="20dp" 
      android:layout_marginRight="14dp" 
      android:layout_marginEnd="14dp" 
      app:iconStateListColor="@color/color_order_tab"/> 

     <TextView 
      android:id="@android:id/text1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/color_order_tab" 
      android:textSize="14sp" 
      android:fontFamily="sans-serif-medium"/> 

    </LinearLayout> 

</RelativeLayout> 

ich Text auf dem Tab nur zeigen wollen, wenn sie ausgewählt - bereits getan - und die Größe dieser Registerkarten dynamisch, Gibt es einen Weg, das zu tun? Wenn ich app:tabMode="fixed" Tabs nicht Größe ändern, wenn ich app:tabMode="scrollable" verwenden, sind meine Tabs immer auf der linken Seite meines Bildschirms. Wenn ich das tue android:layout_width="wrap_content" und android:layout_gravity="center_horizontal" - TabLayout füllt nicht den Bildschirm .. Also muss ich:

  • Resize Registerkarten, wenn Text erscheint oder verschwindet;
  • Tabs sollten den Bildschirm in jedem Fall füllen.
+0

, wie Sie Text verbergen haben, wenn nicht ausgewählten mit dieser App: tabSelectedTextColor = "android: attr/textColorPrimary" App: tabTextColor = "@ android: Farbe/transparent" – Killer

+0

Nein, ich verbergen Text mit Texteinstellung = "", leerer String. – Den

+0

überprüfen Sie bitte die Antwort – Killer

Antwort

3

Zunächst können Sie nicht alle gewünschten Funktionen bei der Verwendung des fixed Modus erhalten. Wie im fixed Modus können Sie die Größe Ihrer Tabs nicht ändern. Sie müssen den Modus scrollable verwenden, um die Größe der Registerkarten zu ändern.

Wenn ich android tun: layout_width = "wrap_content" und android: layout_gravity = "center_horizontal" - TabLayout füllt nicht den Bildschirm

Sie einen übergeordneten Container festlegen und einen Hintergrund Damit erhalten Sie ein Gefühl für ein Tab-Layout mit voller Gerätebreite.

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/holo_orange_light"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     app:tabGravity="center" 
     app:tabMode="scrollable" /> 
</FrameLayout> 

Dann können Sie die Registerkarten dh Ihre benutzerdefinierten Registerkarten in Ihrer Registerkarte Layout hinzufügen und danach können Sie addOnTabSelectedListener fügen Sie die gewünschten Ergebnisse zu erhalten:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); 

     View view = getLayoutInflater().inflate(R.layout.custom_tab, null); 
     ((TextView) view.findViewById(R.id.text)).setText("large text one"); 

     View view1 = getLayoutInflater().inflate(R.layout.custom_tab, null); 
     ((TextView) view1.findViewById(R.id.text)).setText("1"); 

     View view2 = getLayoutInflater().inflate(R.layout.custom_tab, null); 
     ((TextView) view2.findViewById(R.id.text)).setText("Large Text Text Text"); 

     View view3 = getLayoutInflater().inflate(R.layout.custom_tab, null); 
     ((TextView) view3.findViewById(R.id.text)).setText("One"); 


     View view4 = getLayoutInflater().inflate(R.layout.custom_tab, null); 
     ((TextView) view4.findViewById(R.id.text)).setText("Another large text"); 

     mBinding.tabs.addTab(mBinding.tabs.newTab().setCustomView(view)); 
     mBinding.tabs.addTab(mBinding.tabs.newTab().setCustomView(view1)); 
     mBinding.tabs.addTab(mBinding.tabs.newTab().setCustomView(view2)); 
     mBinding.tabs.addTab(mBinding.tabs.newTab().setCustomView(view3)); 
     mBinding.tabs.addTab(mBinding.tabs.newTab().setCustomView(view4)); 

     mBinding.tabs.getTabAt(0).getCustomView().findViewById(R.id.text).setVisibility(View.VISIBLE); 

     mBinding.tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       tab.getCustomView().findViewById(R.id.text).setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       tab.getCustomView().findViewById(R.id.text).setVisibility(View.GONE); 
      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

    } 

Wie können Sie die Registerkarten sind jetzt in der Größe veränderbar und nur Text auf der ausgewählten Registerkarte ist sichtbar. Hoffnung, dass Hilfe

+1

großartig, es funktioniert! Vielen Dank. – Den