2015-09-18 10 views
7

on startup the tab are looking like thisthis is my project on startup..all the tabs are black but i want the first one to be orange(its icon and text)[![this is the second tab when i move to this working fine[![when i get back to the first tab it is working what i want to be..the main isssue is when the app starts] 1] 1 i android Design-Unterstützung tablayout verwendet und ich habe sowohl Symbol und Text auf der Registerkarte .. i ein customtabview verwendet, um Symbol und Text vertically..And i ausrichten möchte die Farbe des Symbols und des Textes ändern, wenn ausgewählt/nicht ausgewählt ist.Tab Symbol und Text sowohl mit Android-Design Support-Bibliothek

Ich habe Selektor-Datei für verschiedene Tab-Symbol..aber die Sache ist, wenn ich das Projekt ausführen die erste Standard-Registerkarte ist nicht ausgewählt, ich möchte sie standardmäßig ausgewählt .. und wenn ich auf andere Registerkarte gehen und dann wischen zurück auf der ersten Registerkarte funktioniert es perfekt in Ordnung .. das Hauptproblem ist, kann ich nicht die erste Registerkarte Fragment ausgewählt..bitte helfen Sie mir, wie ich fest für die letzten 2 Tage..und ich möchte keine Bibliothek von Github

verwenden MainActivity.java

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import java.util.ArrayList; 
import java.util.List; 
import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 



public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private int[] tabIcons = { 
      R.drawable.image1, 
      R.drawable.image2, 
      R.drawable.image3 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
     setupTabIcons(); 
    } 

    private void setupTabIcons() { 

     TextView tabOne = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabOne.setText("ONE"); 
     tabOne.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.image1, 0, 0); 
     tabLayout.getTabAt(0).setCustomView(tabOne); 

     TextView tabTwo = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabTwo.setText("TWO"); 
     tabTwo.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.image2, 0, 0); 
     tabLayout.getTabAt(1).setCustomView(tabTwo); 

     TextView tabThree = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
     tabThree.setText("THREE"); 
     tabThree.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.image3, 0, 0); 
     tabLayout.getTabAt(2).setCustomView(tabThree); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new OneFragment(), "ONE"); 
     adapter.addFrag(new TwoFragment(), "TWO"); 
     adapter.addFrag(new ThreeFragment(), "THREE"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

image1.xml

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:drawable="@drawable/x1" android:state_selected="true" /> 
     <item android:drawable="@drawable/x2" /> 
    </selector> 

crested drei Datei wie oben für drei verschiedene Bild.

custom_tab.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/tab" 
    android:textColor="@color/selector" 
    android:textSize="@dimen/tab_label" 
    android:fontFamily="@string/font_fontFamily_medium"/> 

selector.xml für Text

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
     android:color="#fe5d55" /> <!-- pressed --> 
    <item android:state_pressed="true" 
     android:color="#fe5d55" /> <!-- focused --> 
    <item android:color="#000000" /> <!-- default --> 
</selector> 

jemand helfen?

+1

Haben Sie versuchte 'addTab (Registerkarte TabLayout.Tab, boolean setSelected)'? – hoomi

+0

tatsächlich verwende ich die benutzerdefinierte Ansicht für das tablayout .... ich weiß nicht, wie man das oben genannte benutzt oder wie man Änderungen vornimmt ... bitte sagen Sie mir, beziehen sich auf den obigen Code –

+0

Addieren Sie Ihren Selektor und kundenspezifischen Ansichtcode außerdem. – hoomi

Antwort

3

Was meinst du mit unselected. Können Sie ein Bild davon teilen, was Sie erreichen möchten und wo Sie gerade sind ..

Ich würde Ihren Ansatz nicht empfehlen. Es tut viele Dinge, die nicht benötigt werden, um Ihr Problem zu lösen. Ich schlage vor, dass Sie das Symbol und den Text aus der TabLayout-Klasse verwenden und nur Ihre Symbole (Zeichen mit Zuständen) und Text festlegen. Oder sogar ein benutzerdefiniertes Layout, falls erforderlich, aber die Verwendung von Text1 und Symbol aus dem TabLayout. Haben Sie irgendwelche Probleme dabei?


aktualisieren ..

Versuchen Sie die folgenden:

IconTextTabLayout.java:

package example.customtabs; 

import android.content.Context; 
import android.support.annotation.NonNull; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.PagerAdapter; 
import android.util.AttributeSet; 

import sample.customtabs.example.com.customtabs.R; 


public class IconTextTabLayout extends TabLayout { 


    public IconTextTabLayout(Context context) { 
     super(context); 
    } 

    public IconTextTabLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public IconTextTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void setTabsFromPagerAdapter(@NonNull PagerAdapter adapter) { 
     this.removeAllTabs(); 
     int i = 0; 
     for (int count = adapter.getCount(); i < count; ++i) { 
      this.addTab(this.newTab().setCustomView(R.layout.custom_tab) 
        .setIcon(YourIcons[i]) 
        .setText(adapter.getPageTitle(i))); 
     } 
    } 
} 

custom_tab.xml

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


    <ImageView 
     android:id="@android:id/icon" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

in Ihrer Tätigkeit xml Verwendung IconTextTabLayout. Wie:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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" 
       android:orientation="vertical"> 

    <example.customtabs.IconTextTabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabMode="scrollable"/> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" 
     android:background="@android:color/white"/> 

</LinearLayout> 

auch, Set Ansicht Pager, um es in Ihrer Tätigkeit wie:

IconTextTabLayout tabLayout = (IconTextTabLayout) findViewById(R.id.sliding_tabs); 
tabLayout.setupWithViewPager(viewPager); 

Aufschalten getPageTitle in Ihrem viewpager Adapter bereitzustellen Titel.

@Override 
public CharSequence getPageTitle(int position) { 
    return TITLES[i]; 
} 

Außerdem, wenn Sie möchten, dass Sie Symbole auch von dem Adapter durch ein Verfahren zu schreiben, die Drawables zurückgibt, genau wie die getPageTitle Methode erhalten. Das ist optional. Nur eine Frage des Designs.

-

YourIcons[] = Dies ist ein Array von Drawables. In Ihrem Fall - XML-Dateien, mit ausgewählten und nicht ausgewählten Bilder ...

+0

Ich habe zwei Bilder hochgeladen .... die erste ist was ich bekomme ab jetzt ... wie du siehst, sind alle drei Tabs nicht ausgewählt (da ich die nicht ausgewählte Farbe zu schwarz auswähle) ... und die zweite ist was ich will ... der erste Tab sollte ausgewählt sein (orange Farbe) wenn die App startet .. aber wenn ich zurück zum ersten Tab gehe, funktioniert es gut, nur habe ich nicht den Weg gefunden, den ersten Tab zu wählen, indem ich mich entschuldige ... ich habe es noch nicht versucht ... aber bitte hilf mir dabei ... .im kein Androidexperte ... oder du kannst mir deine Email schicken Ich werde das ganze Projekt dorthin schicken –

+0

hat das geholfen? – Abhilash

+0

hey buddy ich kann den tabtext und das icon nicht sehen ..... ich ziehe zu einer anderen sache über, die ich überspringe ... ich muss mein projekt einreichen ... wenn du etwas zeit hast kannst du bitte diesen teil für mich machen. .u alles wissen..give mir deine E-Mail oder etwas, ich kann dir das Projekt schicken .... bitte ... es ist höchste Zeit ... danke .... und ich weiß deine Antwort wud Arbeit Ich akzeptiere diese Antwort, aber ich muss die Hauptfunktion meiner App ... bitte antworten..danke –

3

Anstatt die TabLayout wie angegeben durch @Abhilash Antwort Customizing nur eine Linie dh tabOne.setSelected(true); in folgenden Code hinzufügen

TextView tabOne = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
tabOne.setText("ONE"); 
tabOne.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.image1, 0, 0); 
tabOne.setSelected(true); //This will make your tab by default selected 
tabLayout.getTabAt(0).setCustomView(tabOne); 
+0

Wie erhalten Sie zurück, dass compunddrwable Farbfilter einstellen, wenn ausgewählt? –

Verwandte Themen