【译】ActionBar 基础3

         在上一篇文章中我们让基于tab的导航起作用了。基于tab的导航在两个或三个的导航项的时候可以很好的工作,但当导航项很多的时候就没那么好了。基于下拉的导航在 导航项 略微多的情况下更佳适合,本文将介绍如何在我们的ActionBar中创建基于下拉的导航。
          在Google Maps 中可以看到基于下拉的导航的例子:
          

          这个导航在ActionBar中作为Spinner出现,Spinner的下拉列表中包含导航选项。在基于tab的导航 适应所有这些选项将会 极其的困难。
     
           运用基于下拉的导航我们首先要设置ActionBar的导航模式和移除标题以便有足够的空间留给spinner:
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setTitle( "" );
   接着我们要创建一个SpinnerAdapter:
finalList<Map<String, Object>> data =
    newArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", getString( R.string.frag1 ) );
map.put("fragment", Fragment.instantiate( this,
    Fragment1.class.getName() ));
data.add( map );
map = new HashMap<String, Object>();
map.put("title", getString( R.string.frag2 ) );
map.put("fragment", Fragment.instantiate( this,
    Fragment2.class.getName() ));
data.add( map );
SimpleAdapter adapter = new SimpleAdapter( this, data,
    android.R.layout.simple_spinner_dropdown_item,
    newString[] { "title" },
    newint[] { android.R.id.text1 } );


这段代码创建了一个Map对象列表,每个map包含两个条目: “title”( 将会在spinner中显示的文本)和 “fragment”( 当spinner项被选中后展示的Fragment )。由此我们创建一个使用标准的Android Spinner下拉布局的SimpleAdapter实例,(在  here可以看到,然道你不只是喜欢开源吗? )并将列表中的每一个Map的“title”条目和
出现在布局中的一个TextView组件匹配起来。
        
     SimpleAdapter是SpinnerAdapter的一个子类,对于结合静态的内容是很有用的。在现实世界中的应用程序你可能想要运用其他类型的Adapter。为了让事情简单和容易理解,我在这里使用它。

     现在我们有了我们的SpinnerAdapter,我们需要将它和 OnNavigationListener一起 设置到ActionBar 来处理导航的回调。当用户更改选择时将会调用它:
actionBar.setListNavigationCallbacks( adapter,
    newOnNavigationListener()
    {
        @Override
        publicbooleanonNavigationItemSelected(
            intitemPosition,
            longitemId )
        {
            Map<String, Object> map =
                data.get( itemPosition );
            Object o = map.get( "fragment" );
            if( o instanceof Fragment )
            {
                FragmentTransaction tx =
                    getFragmentManager().beginTransaction();
                tx.replace( android.R.id.content,
                    (Fragment )o );
                tx.commit();
            }
            returntrue;
        }
    }
);


         每当用户选择Spinner下拉列表的选项时onNavigationItemSelected方法将会被调用。它从我们创建SpinnerAdapter时添加的数据中获得Fragment实例,然后用适当的Fragment替换我们Activity的内容区域。
  
现在运行我们将看到如下内容:
   

          可以工作,但是Spinner上的文本很暗。原因是由ADT 20 新项目创建向导为Android 4.0和更新版本创建了默认主题所造成的。为ActionBar更换主题和样式会有一些棘手,并且将是以后的文章的主题。现在我们将仅仅通过使用标准的Holo.Light来更换主题。所以我们要更改 res/values-v14/styles.xml:
<resources>
 
    <stylename="AppTheme"
        parent="android:Theme.Holo.Light"/>
 
</resources>
现在,有一个亮一点的ActionBar,一切看起来都很好:

        值得记住的一件事是ActionBar也提供了Home(首页)或Up(向上)功能通过点击在左侧的logo。返回键通过用户的历史提供应用程序的导航。而Home/Up提供一个粗粒度的导航备份你的应用程序的层次结构 a coarser-grained navigation back up your app’s hierarchical structure )。官方的文档( official documentation )关于它提供了 一些优秀的信息。

      下篇文章,我们将转移注意力到 当标准的动作和导航没有提供我们需要的UI的时候, 我们可以使用ActionBar的方式。
   
      本篇文章的代码可以在   here 找到。

要在 Android 应用程序中实现顶部返回按钮,可以使用 ActionBar。ActionBar 是 Android 提供的一种 UI 控件,通常位于应用程序的顶部,用于显示应用程序名称、菜单和其他选项。 要实现 ActionBar 中的顶部返回按钮,请按照以下步骤操作: 1. 打开 Android Studio,创建一个新的空白项目。 2. 在 res/values/styles.xml 文件中添加以下代码: ``` <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> </style> ``` 这将为应用程序创建一个基本的主题,其中包含一个暗色 ActionBar。 3. 在 AndroidManifest.xml 文件中,将应用程序的主题设置为上一步中创建的主题: ``` <application android:theme="@style/AppTheme" ... ``` 4. 在 MainActivity.java 文件中,添加以下代码: ``` @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 启用 ActionBar 返回按钮 getSupportActionBar().setDisplayHomeAsUpEnabled(true); } // 处理 ActionBar 返回按钮点击事件 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // 在此处添加返回按钮点击后的处理逻辑 finish(); return true; } return super.onOptionsItemSelected(item); } ``` 这将启用 ActionBar 中的返回按钮,并在用户点击该按钮时关闭当前活动。 5. 运行应用程序,并确保 ActionBar 中显示了返回按钮。单击该按钮,应该会关闭当前活动。 注意:如果您的应用程序需要导航到其他活动,则可以在 onOptionsItemSelected() 方法中添加相应的 Intent。例如: ``` case android.R.id.home: Intent intent = new Intent(this, OtherActivity.class); startActivity(intent); finish(); return true; ``` 这将使 ActionBar 返回按钮导航到 OtherActivity。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值