繁体   English   中英

是否可以在Android的操作栏中使用滑动标签和微调器

[英]Is it possible to use sliding tabs and a spinner in the action bar in Android

我目前有一个带有滑动选项卡的活动,并且我一直在使用ActionBarSherlock,但我想在操作栏中添加一个微调器,以便用户可以从微调器中选择项目,并且每个项目都是一个特定的文件,可以打开值重新填充每个选项卡上的视图。 我一直想看看您如何做到这一点,到目前为止还没有任何运气。 我不希望它们都浏览片段,而是让微调器重新填充选项卡上的视图。 我看过类似的问题, 是否可以在操作栏中使用下拉AND标签作为导航? 这就是我想要的样子,但是他的问题是使用两种不同类型的导航。 请任何人能帮助我,让我知道是否可能。 先感谢您。 我也刚刚看过我拥有的一个Android应用程序,它是Eurosport应用程序,并且如果有人拥有该应用程序,可以查看我的意思。

这是我的代码:

public class SlidingTabsActivity extends SherlockFragmentActivity
{

ViewPager viewPager;
TabsAdapter tabsAdapter;
ActionBar actionBarTabs;
Spinner spinner;
ArrayAdapter<String> arrayAdapter;
LayoutInflater spinnerLayoutInflater;
View spinnerView;

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

    viewPager = new ViewPager(this);
    viewPager.setId(R.id.pager);
    setContentView(viewPager);

    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, R.array.device_description);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerLayoutInflater = (LayoutInflater) this.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    spinnerView = spinnerLayoutInflater.inflate(R.layout.spinner, null);
    spinner = (Spinner) spinnerView.findViewById(R.id.tabsSpinner);
    spinner.setAdapter(arrayAdapter);
    spinner.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

        }

    });

    actionBarTabs = getSupportActionBar();
    actionBarTabs.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBarTabs.setCustomView(spinnerView);
    actionBarTabs.setDisplayShowCustomEnabled(true);
    actionBarTabs.setDisplayHomeAsUpEnabled(true);

    tabsAdapter = new TabsAdapter(this, viewPager); // Declares the tabs adapter class with the view pager view

    /* Adds fragments to the tabs adapter */
    tabsAdapter.addTab(actionBarTabs.newTab().setText("PV"), Fragment_1.class, null);
    tabsAdapter.addTab(actionBarTabs.newTab().setText("CONFIG"), Fragment_2.class, null);
    tabsAdapter.addTab(actionBarTabs.newTab().setText("DIAG"), Fragment_3.class, null);

}

这是我的微调代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<Spinner
    android:id="@+id/tabsSpinner"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" />

</RelativeLayout>

按下Spinner时,我在logcat中收到以下消息:

11-26 12:22:44.282: W/InputEventReceiver(7217): Attempted to finish an input event but the input event receiver has already been disposed.
11-26 12:22:44.282: W/InputMethodManagerService(525): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4216a290 attribute=null, token = android.os.BinderProxy@42618330

因此,首先创建一个标记文件来放置Spinner ,例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:spinnerMode="dropdown" >
    </Spinner>

</RelativeLayout>  

接下来创建一个菜单资源,例如main_menu.xml并将其放入res/menu文件夹:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_change_content"
        android:actionLayout="@layout/spinner_layout"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/empty">
    </item>

</menu>  

请注意,我们为此菜单项指定了自定义操作布局-这是我们之前创建的布局,其中包含Spinner 接下来,您必须在Activity (或Fragment )中添加以下菜单:
如果您在“ Activity创建此菜单,请使用此菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    ...// init spinner, will be explained below
    return true;
}

或者,如果您在Fragment创建菜单:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.card_storage, menu);
    ...// init spinner
}  

如果您为Fragment创建此菜单,请不要忘记在Fragment.onCreate()某个位置调用setHasOptionMenu(true) Fragment.onCreate()

放置它而不是... // init spinner

MenuItem item = menu.findItem(R.id.action_change_content); // id of our custom menu item
CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(); // your adapter
Spinner spinner = (Spinner) item.getActionView().findViewById(R.id.spinner); 
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);  

我希望我不会错过任何东西。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM