2013-08-30 2 views
1

En utilisant la bibliothèque de prise en charge de la barre d'actions, j'essaie de placer la vue personnalisée dans la barre d'action avec la navigation par tabulation. Mais ça ne se passe pas comme prévu.Bibliothèque de prise en charge de la barre d'actions - vue personnalisée et onglets

Ci-dessous le code.

public class TODOListHomeActivity extends BaseActivity { 

private RelativeLayout topbarLayout; 
private TextView titleTextView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    _activity = this; 
    // Notice that setContentView() is not used, because we use the root 
    // android.R.id.content as the container for each fragment 

    // setup action bar for tabs 
    actionBar = getSupportActionBar(); 
    // disable the default title and icon display 
    actionBar.setDisplayShowHomeEnabled(false); 
    actionBar.setDisplayShowTitleEnabled(false); 
    actionBar.setLogo(null); 
    View homeIcon = findViewById(android.R.id.home); 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 

    // TODO: The below code may change as per new design 
    topbarLayout = (RelativeLayout)LayoutInflater.from(_activity).inflate(getResources().getLayout(R.layout.header_layout), null); 
    actionBar.setCustomView(topbarLayout); 
    titleTextView = (TextView)topbarLayout.findViewById(R.id.tv_messagecenter); 
    titleTextView.setText(getResources().getText(R.string.todolist)); 
    // new design-end 

    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    Tab tab = actionBar.newTab() 
      .setText(getResources().getString(R.string.tasks)) 
      .setTabListener(new TabListener<TODOListFragment>(
        this, getResources().getString(R.string.tasks), TODOListFragment.class)); 
    actionBar.addTab(tab); 

    tab = actionBar.newTab() 
      .setText(getResources().getString(R.string.due_today)) 
      .setTabListener(new TabListener<TODOListFragment>(
        this, getResources().getString(R.string.due_today), TODOListFragment.class)); 
    actionBar.addTab(tab); 

    tab = actionBar.newTab() 
      .setText(getResources().getString(R.string.completed)) 
      .setTabListener(new TabListener<TODOListFragment>(
        this, getResources().getString(R.string.completed), TODOListFragment.class)); 
    actionBar.addTab(tab); 
} 

class TabListener<T extends Fragment> implements ActionBar.TabListener { 
    private Fragment mFragment; 
    private final Activity mActivity; 
    private final String mTag; 
    private final Class<T> mClass; 

    /** Constructor used each time a new tab is created. 
    * @param activity The host Activity, used to instantiate the fragment 
    * @param tag The identifier tag for the fragment 
    * @param clz The fragment's Class, used to instantiate the fragment 
    */ 
    public TabListener(Activity activity, String tag, Class<T> clz) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
    } 

    /* The following are each of the ActionBar.TabListener callbacks */ 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // Check if the fragment is already initialized 
     if (mFragment == null) { 
      // If not, instantiate and add it to the activity 
      mFragment = Fragment.instantiate(mActivity, mClass.getName()); 
      ft.add(android.R.id.content, mFragment, mTag); 
     } else { 
      // If it exists, simply attach it in order to show it 
      ft.attach(mFragment); 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     if (mFragment != null) { 
      // Detach the fragment, because another one is being attached 
      ft.detach(mFragment); 
     } 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // User selected the already selected tab. Usually do nothing. 
    } 
} 

et header_layout.xml est

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:custom="http://schemas.android.com/apk/res/com.vl.infotrax" 
style="?attr/actionButtonStyle" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_gravity="fill_horizontal" 
android:background="@drawable/topstrip" > 

<ImageView 
    android:id="@+id/iv_crossicon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="@dimen/margin_small" 
    android:src="@drawable/crossicon" /> 

<com.vl.infotrax.components.CustomTextView 
    android:id="@+id/tv_messagecenter" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:layout_marginLeft="@dimen/margin_small" 
    android:layout_toLeftOf="@+id/btn_brodcast_menu" 
    android:layout_toRightOf="@+id/iv_crossicon" 
    android:ellipsize="end" 
    android:gravity="center" 
    android:lines="1" 
    android:maxLines="1" 
    android:singleLine="true" 
    android:text="MESSAGE CENTER" 
    android:textColor="@android:color/white" 
    android:textSize="@dimen/textsize_titlebar" 
    custom:customFont="fonts/HELVETIC.TTF" /> 

<ImageView 
    android:id="@+id/btn_brodcast_menu" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:layout_marginRight="@dimen/margin_small" 
    android:background="@drawable/broadcasticon" /> 

</RelativeLayout> 

La sortie ressemble comme ci-dessous.

Layout Link

J'ai besoin la barre d'onglets devrait venir sous la vue personnalisée. Comment puis je faire ça?

+0

Et votre vue personnalisée est une barre d'action ?? – Piyush

+0

Ce n'est pas une barre d'action. Mais je veux l'utiliser comme vue personnalisée pour la barre d'action. – Kameswari

+0

Si vous supprimez actionBar.setDisplayShowHomeEnabled (false), cela a-t-il fonctionné? Voir https://code.google.com/p/android/issues/detail?id=36191, commentez 2 (vous avez utilisé) et 3. –

Répondre

0

Dans votre cas, un ActionBar est intégré pour chaque onglet au lieu d'un pour tous les onglets, mais vous avez besoin ActionBar avec ViewPager, le chemin inverse. Jetez un oeil à ce tutoriel http://wptrafficanalyzer.in/blog/implement-swiping-between-tabs-with-viewpager-in-action-bar-using-sherlock-library/

+0

Merci pour la réponse. Mais je n'utilise pas Sherlock. J'utilise la bibliothèque de support android-actionbar-compat. – Kameswari

+0

Je viens de mentionner la façon dont vous pouvez utiliser pour réaliser votre effet et à condition que ce lien comme un exemple, vous pouvez utiliser Viewpager avec ActionBarCompat Support-Library aussi, il suffit de croire à la recherche sur Google :) –

0

Vous pouvez essayer une solution de contournement comme ça ...

tout d'abord mis en setDisplayShowHomeEnabled(true) puis suivez mentionné ci-dessous

actionBar.setDisplayShowHomeEnabled(true); 

     try{ 
      View homeIcon = findViewById(android.R.id.home); 
      ((View) homeIcon.getParent()).setVisibility(View.GONE); 
     } 
     catch(Exception e) 
     { 

     } 

Questions connexes