簡體   English   中英

是否可以使用下拉菜單和標簽作為操作欄中的導航?

[英]Is it possible to use dropdown AND tabs as navigation in the action bar?

是否可以同時擁有頂部的微調器/下拉菜單和操作欄中的下方的選項卡? 我想使用操作欄頂部的微調器作為視圖切換控制器(即表視圖或圖表視圖),而下面的選項卡將顯示不同的數據列表。

以下屏幕截圖說明了我想要實現的目標:

在此輸入圖像描述

如果在操作欄中無法同時使用這兩種模式,我可以將TabWidget放在內容視圖的頂部。 但是,我有點不確定每個標簽是否應該有一個片段或一個活動。

編輯:

是否可以使用下拉菜單和標簽作為操作欄中的導航?

號中的代碼ActionBarView (其中setNavigationMode(int)的呼叫結束)使用switch語句,所以模式不能被組合。

操作欄導航模式和我之前的答案的某些組合仍然是一個有效的選項:您可以在操作欄中使用自定義視圖並使用ViewPager作為內容。 ViewPager中的每個選項卡都是一個片段,您可以在更改微調器時從父活動手動更新(更改視圖類型)。

另請注意,有第三方庫(如ViewPagerExtensions)可以在不使用ActionBar選項卡的情況下提供固定選項卡外觀。

這是可能的。 我試圖獲得與你所展示的相同的用戶界面,直到我嘗試了一些非常簡單但有點令人困惑的東西。

我所做的是將Spinner設置為ActionBar的自定義視圖,然后:

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

這是我的意思的一個例子。

標簽代碼:

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));

在此活動的父活動中,我已完成此操作:

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);

這有效地為我提供了ActionBar的自定義視圖,但是我可以將navigationMode設置為選項卡以允許我擁有我想要的選項卡。 在每個項目上設置適當的事件監聽器,瞧!

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

在使用bat的默認lib中不可能,您可以創建自定義操作欄視圖並設置該操作

嘗試這一個代碼

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>

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

}

您還可以創建自定義操作提供程序以在操作欄中實現微調器。 因此,無需創建整個操作欄。 通過執行此操作並使用選項卡作為導航模式,您的目標就實現了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM