2015-07-29 3 views
4

У меня проблема с TabLayout в Android. Я использую библиотеку AppCompat, потому что мой мини-SDK равен 10. Проблема заключается в том, что если TabLayout имеет видимость GONE при первом создании активности, когда я устанавливаю видимость в VISIBLE позже, индикаторы табуляции и индикатор табуляции отсутствуют.Текст TabLayout исчезает, когда видимость идет от GONE до VISIBLE

Вот мой MainActivity:

public class MainActivity extends AppCompatActivity { 

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

    /** 
    * Called when we press the button. 
    */ 
    public void openTabActivity(View view) { 
     Intent intent = new Intent(this, TabActivity.class); 
     startActivity(intent); 
    } 
} 

TabActivity это:

public class TabActivity extends FragmentActivity { 

    MyPagerAdapter mMyPagerAdapter; 
    ViewPager mViewPager; 
    TabLayout mTabLayout; 

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

     // ViewPager and its adapters use support library 
     // fragments, so use getSupportFragmentManager. 
     mMyPagerAdapter = 
       new MyPagerAdapter(
         getSupportFragmentManager()); 
     mViewPager = (ViewPager) findViewById(R.id.myViewPager); 
     mViewPager.setAdapter(mMyPagerAdapter); 

     // Link the TabLayout with the ViewPager. 
     mTabLayout = (TabLayout) findViewById(R.id.myTab); 
     mTabLayout.setupWithViewPager(mViewPager); 

     // If I set visibility GONE it doesn't show titles 
     // when I set it to VISIBLE again. 
     // If I remove this, it works fine. 
     mTabLayout.setVisibility(View.GONE); 

    } 

    /** 
    * If the tab is visible it turn it gone, if it's gone it turn it 
    * visible. 
    * @param view 
    */ 
    public void toggleTab(View view) { 
     Log.d(this.getClass().toString(), "ShowTab()"); 
     if (mTabLayout.getVisibility() == View.VISIBLE) { 
      Log.d(this.getClass().toString(), "Turning GONE"); 
      mTabLayout.setVisibility(View.GONE); 
     } else { 
      Log.d(this.getClass().toString(), "Turning VISIBLE"); 
      mTabLayout.setVisibility(View.VISIBLE); 
     } 
    }  
} 

адаптер Страница:

public class MyPagerAdapter extends FragmentStatePagerAdapter { 

    final int PAGE_COUNT = 3; 
    private String tabTitles[] = new String[]{"Tab 1", "Tab 2", "Tab 3"}; 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     Fragment fragment = new MyFragment(); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Generate title based on item position 
     return tabTitles[position]; 
    } 
} 

Фрагмент:

public class MyFragment extends Fragment { 

    public static MyFragment newInstance() { 
     MyFragment fragment = new MyFragment(); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.my_fragment, container, false); 
     return view; 
    } 

} 

Макеты очень просто тоже:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       tools:context=".MainActivity"> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:onClick="openTabActivity" 
     android:textColor="#55F" 
     android:text="Press to go to Tabs"/> 

</RelativeLayout> 

activity_tab.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       tools:context=".TabActivity"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/myTab" 
     style="@style/AppTheme.Tab.NavigationTab" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/lightPrimaryColor"/> 

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

</LinearLayout> 

my_fragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tools:context=".MyFragment"> 

    <Button 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:onClick="toggleTab" 
     android:text="Press"/> 

</FrameLayout> 

Если я установить видимость Gone в TabActivity. onCreate это терпит неудачу. Если это VISIDLE в TabActivity.onCreate, это работает.

Я попытался использовать .invalidate(), но это не сработает.

Может кто-нибудь мне помочь?

Заранее за вашу помощь.

ответ

6

Подтверждено. Это ошибка в библиотеке com.android.support:design:22.2.1. Если я использую com.android.support:design:22.2.0, он отлично работает. Он будет решен в будущих выпусках библиотеки.

Here is the issue in code.google.com

0

Не уверен, что если его та же самая проблема, но что-то подобное происходит со мной, когда у меня не было tabTextColor и tabSelectedTextColor атрибуты стиля набора.

Брок, когда повышен до com.android.support:support-v13:23.1.1 от 22.2.0, решена следующим стилем:

<style name="exploreTabLayout" parent="Widget.Design.TabLayout"> 
    <item name="tabIndicatorColor">@color/accent_teal</item> 
    <item name="tabIndicatorHeight">4dp</item> 
    <item name="tabTextColor">@color/bismark_blue</item> 
    <item name="tabSelectedTextColor">@color/accent_teal</item> 
</style> 

 Смежные вопросы

  • Нет связанных вопросов^_^