Android开发学习之ActionBar之Tab和Spinner导航

             在 上一篇文章中,我们实现了ActionBar的简单功能,并对ActionBar有了一定的了解。事实上,ActionBar提供了三种导航方式,分别是标准、Tab、Spinner。那么今天我们就来学习后面两种。首先来看看最终实现的效果吧!


               一、Tab模式下的ActionBar,布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <TextView
        android:id="@+id/TabText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</LinearLayout>
              主要逻辑代码如下:

package com.Android.ActionBarTab;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity implements TabListener {

	private ActionBar mActionBar;
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv=(TextView)findViewById(R.id.TabText);
		//取得ActionBar
		mActionBar=getActionBar();
		//以Tab方式导航
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		//禁用ActionBar标题
		mActionBar.setDisplayShowTitleEnabled(false);
		//禁用ActionBar图标
		mActionBar.setDisplayUseLogoEnabled(false);
		//禁用ActionBar返回键
		mActionBar.setDisplayShowHomeEnabled(false);
		//添加Tab
		for(int i=0;i<4;i++)
		{
			ActionBar.Tab tab=mActionBar.newTab();
			tab.setText("选项卡"+i);
			tab.setTabListener(this);
			mActionBar.addTab(tab);
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void onTabSelected(Tab tab, FragmentTransaction arg1) 
	{
		tv.setText("这里是"+tab.getText());
	}

	@Override
	public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
		// TODO 自动生成的方法存根
		
	}

}

           注意,这里并没有对这个例子进行深化,其实结合Fragment我们可以做出更棒的效果来,这点先卖个关子,后面有时间的话会为大家分享的

      

           二、Spinner模式下的ActionBar,布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <TextView
        android:id="@+id/TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textIsSelectable="true" />
</RelativeLayout>

          主要的逻辑代码如下:

package com.Android.ActionBarWithView;


import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

public class MainActivity extends Activity {

	private ActionBar mActionBar;
	private String[] SpinnerValues;
	private TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//取得TextView
		tv=(TextView)findViewById(R.id.TextView);
		//初始化数组
		SpinnerValues=getResources().getStringArray(R.array.SpinnerValues);
		//构造适配器
		SpinnerAdapter mAdapter=ArrayAdapter.createFromResource(this, R.array.SpinnerValues, android.R.layout.simple_spinner_dropdown_item);
		//取得ActionBar
		mActionBar=getActionBar();
		//以下拉列表方式导航
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		//设置监听器
		mActionBar.setListNavigationCallbacks(mAdapter, new OnNavigationListener()
		{
			@Override
			public boolean onNavigationItemSelected(int position, long id) 
			{
				tv.setText("你选择了了"+SpinnerValues[position].toString());
				return false;
			}
			
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) 
	{
		menu.add("测试项1").setIcon(R.drawable.ic_editor_white).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		menu.add("测试项2").setIcon(R.drawable.ic_search_white).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		menu.add("测试项3").setIcon(R.drawable.ic_refresh_white).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
		return true;
	}

}

             同样地,上面的这个例子可以和Fragment进行很好的整合,做出更棒的效果。ActionBar+Fragment可以说是很无敌的一种设计方式。



雪轻鸿 CSDN认证博客专家 .NET Python 伪·全栈攻城狮
谢谢你,在这世界的角落,找到我,一个即将进入而立之年的中年大叔,常年以 飞鸿踏雪 的花名混迹江湖。在现实生活中,我是一名 伪·全栈攻城狮,因为我觉得,什么都略懂一点,生活会更多彩一些。目前,主要关注.NET、.NET Core、Python、数据分析、微服务、Web 等技术方向。日常行为:读书、写作、电影、烹饪、洞箫等。喜欢看日剧/纪录片/科普、刷B站、刷LeetCode等。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值