14

Mam układ podwójny w układzie krajobrazu o rozmiarze tabletu i używam fragmentów.Podświetl lub zaznacz podkreślenie TabPageIndicator

Po lewej stronie mam fragment z widokiem listy. Kiedy kliknięcie pojawi się na jednej z list przedmiotów, właściwy fragment ładuje szczegóły.

w układzie prawo (fragment) fragment jest com.viewpagerindicator.TabPageIndicator i android.support.v4.view.ViewPager. ViewPager ładuje elementy 2, a każdy z nich ma swój com.viewpagerindicator.TabPageIndicator. Próbuję zaznaczyć lub podkreślić wybraną kartę, ale nie udało mi się tego zrobić.

Mam nadzieję, że masz jakieś rady :)

+0

Proszę zaktualizować swoje pytanie i umieścić jakiś kod tutaj. – Wh1T3h4Ck5

Odpowiedz

22

Domyślnie TabPageIndicator nie stosuje styl. Aby włączyć domyślny styl z ViewPagerIndicator dodać następującą linię do obu tagu application lub odpowiedni activity tag w swojej manifest.xml

android:theme="@style/Theme.MyTheme" 

Następnie dodać plik res\values\styles.xml do projektu o następującej treści

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.MyTheme" parent="@android:style/Theme.Light"> 
     <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item> 
    </style> 
</resources> 

Używam motywu świetlnego z Androidem dla mojej aplikacji, ale możesz chcieć zmienić to na temat, którego teraz używasz.

Jeśli chcesz dokonać zmian w stylu domyślnego VPI zmienić plik styles.xml do czegoś takiego:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <style name="Theme.MyTheme" parent="@android:style/Theme.Light"> 
    <item name="vpiTabPageIndicatorStyle">@style/MyTabPageIndicator</item> 
    </style> 

    <style name="MyTabPageIndicator" parent="Widget.TabPageIndicator"> 
    <item name="android:gravity">center</item> 
    <item name="android:background">@drawable/vpi__tab_indicator</item> 
    <item name="android:paddingLeft">22dip</item> 
    <item name="android:paddingRight">22dip</item> 
    <item name="android:paddingTop">12dp</item> 
    <item name="android:paddingBottom">12dp</item> 
    <item name="android:textAppearance">@style/MyTabPageIndicator.Text</item> 
    <item name="android:textSize">12sp</item> 
    <item name="android:maxLines">1</item> 
    </style> 

    <style name="MyTabPageIndicator.Text" parent="TextAppearance.TabPageIndicator"> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textColor">@color/vpi__dark_theme</item> 
    </style> 

</resources> 

Należy pamiętać, że ustawienia powyżej są dokładnie takie same jak w domyślnym stylu VPI dla TabPageIndicactor, więc nadal musisz wprowadzić zmiany, które chcesz.

+0

To doprowadzało mnie do szału, dzięki! – HGPB

+0

Witam, używam paska akcji, jak mogę zaimplementować zarówno pasek akcji, jak i Androida: theme = "@ style/Theme.MyTheme" w pliku manifestu? – NPE

+1

@StackOverflowError Myślę, że ten problem został rozwiązany [tutaj] (http://stackoverflow.com/q/9737103/741249) i [tutaj] (http://stackoverflow.com/q/12267660/741249) – THelper

1

Po prostu użyj dwóch bibliotek 1) Pasek działań Sherlocka 2) ViewPageIndicator i implementuj widok tabPageIndicator zapewnia zakładkę domyślną, a zakładka highliget zapewnia podkreślenie. JEŚLI chcesz zmienić kolor podkreślenia, niż potrzebujesz zmienić rysowanie dziewięciu łatek, które zostały użyte w underlinbe.

Oto przykładowy kod

widok XML próbka

   <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" > 

     <com.viewpagerindicator.TabPageIndicator 
      android:id="@+id/indicator" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/lock_background_greeen" 
      /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="fill_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 
    </LinearLayout> 
</FrameLayout> 

fragment kodu

 final FragmentPagerAdapter adapter = new FragmentChildPageAdapter(getChildFragmentManager());//getActivity().getSupportFragmentManager() 

    final ViewPager pager = (ViewPager) v.findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    final TabPageIndicator indicator = (TabPageIndicator) v.findViewById(R.id.indicator); 
    indicator.setViewPager(pager);