2012-08-01 14 views
20

Her ikisine birden sahip olmak mümkün mü, üstte bir çevirici/açılır menü ve işlem çubuğunun hemen altındaki sekmeler var mı? Aşağıdaki sekmeler, farklı veri listeleri gösterecekken, eylem çubuğunun üstündeki döndürücüyü görüntüleme düğmesi denetleyicisi (yani tablo görünümü veya grafik görünümü) olarak kullanmak istiyorum.Açılır pencereyi ve sekmeleri eylem çubuğunda gezinme olarak kullanmak mümkün mü?

aşağıdaki ekran görüntüsü aynen ben elde etmek istediğinizi gösterir:

enter image description here

işlem çubuğunun her iki modları sahip mümkün değilse, benim içerik görünümünün üst kısmında bir TabWidget koyabilirim. Bununla birlikte, bir sekme veya bir sekme başına bir etkinlik almam gerekiyorsa biraz emin değilim.

+0

Ben eylem çubuğu, başka bir satır yaratacak çok uzunsa, eminim. –

+0

Bunu neden yapmak istersiniz? Kullanıcılara kafa karıştırıcı gibi görünüyor. –

+4

@JeffAxelrod quora, onların android uygulaması için yapar. Bu durumda http://marketingland.com/wp-content/ml-loads/2012/09/quora-android.jpg –

cevap

3

DÜZENLEME:

işlem çubuğunun içinde gezinme gibi açılan VE sekmeleri kullanmak mümkün mü?

sayılı ActionBarView kod (setNavigationMode (int) çağrısı biter olduğu) bir switch deyimi kullanır, bu nedenle modlar birleştirilemez.

işlem çubuğu navigasyon modları ve önceki cevabın Bazı kombinasyonu olsa hala geçerli bir seçenektir: Sen Eylem Bar'da custom view kullanabilir ve içerik için ViewPager kullanabilirsiniz. ViewPager'daki her sekme, değiştirici değiştiğinde ana aktiviteden manuel olarak güncellenebilen (görünüm tipini değiştirebileceğiniz) bir parça olacaktır.

Yan not, ActionBar sekmelerini kullanmadan sabit sekme görünümü veren ViewPagerExtensions gibi üçüncü taraf kitaplıkları vardır.

+0

bakın ben NAVIGATION_MODE_TAB için NAVIGATION_MODE_LIST dan İşlem çubuğunun navigasyon modunu değiştirmek gerekecektir. Bu, eğiriciyi hareket çubuğunda ortadan kaldıracaktır. –

+0

Hayır, bu durumda eylem çubuğunda gezinme ile hiçbir ilgisi olmaz ve sekmeler eylem çubuğunun parçası olmaz. EDIT: açıkladığım cevabı – roflharrison

+0

olarak değiştirdi. Lütfen bir örneğe başvurabilir misiniz? Ne demek istediğini anladığımdan emin değilim. Teşekkürler! –

1
Is it possible to use dropdown AND tabs as navigation in the action bar? 

mümkün değil, özel işlem çubuğu görünümü oluşturmak ve olası bir

bu bir kod

action_bar.xml 

<LinearLayout 
    android:id="@+id/actionbar_linearLayout_menu" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="2dip" 
    android:gravity="right" > 

    <ImageView 
     android:id="@+id/actionbar_imageView_menu_search" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="5dip" 
     android:padding="8dp" 
     android:src="@drawable/button_search_selector" /> 

    <ImageView 
     android:id="@+id/actionbar_imageView_menu_myaccount" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="5dip" 
     android:padding="8dp" 
     android:src="@drawable/button_myaccount_selector" /> 

    <ImageView 
     android:id="@+id/actionbar_imageView_menu_settings" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="5dip" 
     android:padding="8dp" 
     android:src="@drawable/button_settings_selector" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/actionbar_linearLayout_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_toLeftOf="@+id/actionbar_linearLayout_menu" > 

    <Spinner 
     android:id="@+id/actionbar_spi_menu" 
     style="@style/MenuSpinnerTextViewItem" 
     android:layout_width="80dip" 
     android:layout_height="34dip" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="6dip" 
     android:background="@drawable/spinner_bg" 
     android:paddingLeft="3dip" 
     android:spinnerMode="dropdown" 
     android:visibility="gone" /> 

    <com.smartdeal.util.SmartDealTextView 
     android:id="@+id/actionbar_txt_title" 
     style="@style/Style_Text_Bold" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_marginTop="4dip" 
     android:gravity="left" 
     android:padding="5dip" 
     android:text="Smart Deal" 
     android:textColor="@android:color/white" 
     android:textSize="18dip" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/actionbar_linearLayout_search" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@drawable/serch_bg" 
    android:visibility="gone" > 

    <ImageView 
     android:id="@+id/actionbar_imageView_searchMenu_search" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/search_icon_selected" /> 

    <EditText 
     android:id="@+id/actionbar_edt_searchMenu" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dip" 
     android:layout_weight="1" 
     android:background="@null" 
     android:singleLine="true" 
     android:textColor="@android:color/white" 
     android:textSize="18dip" > 
    </EditText> 

    <ImageView 
     android:id="@+id/actionbar_imageView_searchMenu_cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginLeft="5dip" 
     android:src="@drawable/search_cancel" /> 
</LinearLayout> 

deneyin ayarlayabilirsiniz sopayı kullanarak lib varsayılan

BaseActivity.java

{ 
final ActionBar ab = getSupportActionBar(); 
     ab.setDisplayHomeAsUpEnabled(true); 
     final LayoutInflater inflater = (LayoutInflater) getSystemService("layout_inflater"); 
     ab.setDisplayShowTitleEnabled(false); 
     // ab.setTitle("Settings"); 
     View view = inflater.inflate(R.layout.actionbar_view, null); 

     linLayoutMenu = (LinearLayout) view 
       .findViewById(R.id.actionbar_linearLayout_menu); 
     linLayoutSearch = (LinearLayout) view 
       .findViewById(R.id.actionbar_linearLayout_search); 
     linLayoutTitle = (LinearLayout) view 
       .findViewById(R.id.actionbar_linearLayout_title); 

     txtTitle = (TextView) view.findViewById(R.id.actionbar_txt_title); 
     spiMenu = (Spinner) view.findViewById(R.id.actionbar_spi_menu); 

     menuSearch = (ImageView) view 
       .findViewById(R.id.actionbar_imageView_menu_search); 
     menuMyaccount = (ImageView) view 
       .findViewById(R.id.actionbar_imageView_menu_myaccount); 
     menuSettings = (ImageView) view 
       .findViewById(R.id.actionbar_imageView_menu_settings); 
     menuSearchCancel = (ImageView) view 
       .findViewById(R.id.actionbar_imageView_searchMenu_cancel); 

     menuSearch.setOnClickListener(this); 
     menuMyaccount.setOnClickListener(this); 
     menuSettings.setOnClickListener(this); 
     menuSearchCancel.setOnClickListener(this); 

     if (this instanceof HistoryActivity) { 
      txtTitle.setVisibility(View.GONE); 
      spiMenu.setVisibility(View.VISIBLE); 

      List<String> list = new ArrayList<String>(); 
      list.add("History"); 
      list.add("Activity"); 

      MenuListAdapter menuList = new MenuListAdapter(this, list); 
      spiMenu.setAdapter(menuList); 

     } else { 
      txtTitle.setVisibility(View.VISIBLE); 
      spiMenu.setVisibility(View.GONE); 
     } 

     ab.setCustomView(view); 
     ab.setDisplayShowCustomEnabled(true); 
} 

ViewActivity.java

TabListener {

private ListView historyList; 
private ArrayList<String> list; 
LinearLayout linLayoutHistory, linLayoutActivity; 
private ActionBar actionBar; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.....); 

    initComponent(); 

} 

private void initComponent() { 
    // setActionBarHomeUpAsEnable(true); 

    linLayoutActivity = (LinearLayout) findViewById(R.id.history_activity_linLayout_activity); 
    linLayoutHistory = (LinearLayout) findViewById(R.id.history_activity_linLayout_history); 

    historyList = (ListView) findViewById(R.id.history_activity_listView); 
    list = new ArrayList<String>(); 

    spiMenu.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 


     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 

    actionBar = getSupportActionBar(); 

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab month_tab = actionBar.newTab() 
      .setText(getResources().getString(R.string.tab_month)) 
      .setTabListener(this); 
    ActionBar.Tab year_tab = actionBar.newTab() 
      .setText(getResources().getString(R.string.tab_year)) 
      .setTabListener(this); 
    ActionBar.Tab all_tab = actionBar.newTab() 
      .setText(getResources().getString(R.string.tab_all)) 
      .setTabListener(this); 

    actionBar.addTab(month_tab); 
    actionBar.addTab(year_tab); 
    actionBar.addTab(all_tab); 

    return super.onCreateOptionsMenu(menu); 

} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 

} 
1

Ayrıca eylem çubuğunda bir değer değiştirici ulaşmak için özel bir eylem sağlayıcı oluşturabilirsiniz. Yani tüm eylem çubuğu oluşturmaya gerek yok. Bunu yaparak ve sekmeleri gezinme modu olarak kullanarak hedefiniz yerine getirilir.

2

Bu mümkün. Gösterdiklerinize özdeş bir UI elde etmeye çalışıyordum ve oldukça basit ama biraz kafa karıştırıcı bir şey denedim kadar sıkışmıştı.Sonra İşlem Çubuğu benim özel görünüm olarak bir Spinner ayarlanır ve Benim yaptığım

:

ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Burada ne demek istediğimi bir örnek.

Sekmeler Kodu: Sonra

Context contextTheme = new ContextThemeWrapper(this, R.style.ActionBarSpinner); 
Spinner actionBarSpinner = new Spinner(contextTheme); 

// Specify a SpinnerAdapter to populate the dropdown list. 
actionBarSpinnerAdapter = new ActionBarSpinnerAdapter(actionBar.getThemedContext(), dropdownValues); 
actionBarSpinner.setAdapter(actionBarSpinnerAdapter); 

// Set up the dropdown list navigation in the action bar. 
actionBarSpinner.setOnItemSelectedListener(this); 

actionBar.setCustomView(actionBarSpinner); 

Bu etkin hale getirir bana İşlem Çubuğu için özel bir görünüm verir, ama: Bu etkinlik için ana aktivitede

ActionBar actionBar = getActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

actionBar.addTab(actionBar.newTab().setText("Today").setTabListener(this)); 
actionBar.addTab(actionBar.newTab().setText("List").setTabListener(this)); 
actionBar.addTab(actionBar.newTab().setText("Month").setTabListener(this)); 

, bunu yaptık İstediğim sekmeleri kullanmama izin vermek için navigationMode'u sekmelere ayarlayabilirsiniz. Her bir öğeye uygun olay dinleyicilerini ayarlayın ve voila!

+0

Bunu yapmayı önermiyorum. Aygıtı döndürürken, eylem çubuğu gizlenir ve özel görünüm sekmelerin sağına yerleştirilir, en azından benim durumumda istediğim şey değil. Ayrıca, cevabınızı tamamlamak için ActionBarSpinner stilini sağlamanız gerekir. Ayrıca, başlığı gizlemeniz gerekir, aksi halde sizin spinner başlığın sağına yerleştirilir: actionBar.setDisplayShowTitleEnabled (false); – Maragues

İlgili konular