Actionbar使用的简单实例

actionbar在2.x及以前的版本使用中,要导入支持的jar包,现在在3.0以上的版本都包含有actionbar了,直接使用就可以了。

1.按标题

public class MainActivity extends Activity {
	private TextView txt;
	private ActionBar bar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	public void initView() {
		txt = (TextView) findViewById(R.id.tv_txt);

		bar = getActionBar();
		bar.setDisplayHomeAsUpEnabled(true);
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		if(item.getItemId()==android.R.id.home){
			Toast.makeText(this, "press home!!", 1000).show();
		}
		return super.onOptionsItemSelected(item);
	}
}

2.图标

public class TestMain extends Activity {

	private TextView txt;
	private ActionBar bar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	public void initView() {
		txt = (TextView) findViewById(R.id.tv_txt);

		bar = getActionBar();
		bar.setDisplayHomeAsUpEnabled(true);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.bar, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		if (item.getItemId() == android.R.id.home) {
			Toast.makeText(this, "press home!!", 1000).show();
		} else if (item.getItemId() == R.id.menu_action_icon1) {
			Toast.makeText(this, "action 1", 1000).show();
		} else if (item.getItemId() == R.id.menu_action_icon2) {
			Toast.makeText(this, "action 2", 1000).show();
		}
		return super.onOptionsItemSelected(item);
	}

}

menu中的bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_action_icon1"
        android:showAsAction="ifRoom"
        android:title="Action1"/>
    <item
        android:id="@+id/menu_action_icon2"
        android:icon="@drawable/creep002"
        android:showAsAction="ifRoom"
        android:title="Action2"/>

</menu>


3.搜索

public class TestMain extends Activity {
	private ActionBar bar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	public void initView() {
		bar = getActionBar();
		bar.setDisplayHomeAsUpEnabled(true);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.bar, menu);
		// 搜索
		SearchView searchView = (SearchView) menu.findItem(R.id.menu_search)
				.getActionView();
		searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

			@Override
			public boolean onQueryTextSubmit(String query) {
				// TODO Auto-generated method stub
				// 跳转到搜索结果界面
				Intent intent = new Intent(TestMain.this, TestResult.class);
				intent.putExtra("str", query);
				startActivity(intent);
				return true;
			}

			@Override
			public boolean onQueryTextChange(String newText) {
				// TODO Auto-generated method stub
				return false;
			}
		});
		return super.onCreateOptionsMenu(menu);
	}
}

如果想初始化的时候,searchview是伸展的,那么设置:

// 初始化时,该组件是展开的
		searchView.setIconified(false);

并且,在menu中:

android:showAsAction="ifRoom"

menu:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/icon_search"
        android:showAsAction="collapseActionView|ifRoom"
        android:title="Search"/>
 
</menu>


4.下拉列表

public class TestMain extends Activity implements OnNavigationListener {
	private ActionBar bar;
	private int i = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	public void initView() {
		bar = getActionBar();
		bar.setDisplayHomeAsUpEnabled(true);
		bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, new String[] { "First",
						"Second","Third" });
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		bar.setListNavigationCallbacks(adapter, this);
	}

	@Override
	public boolean onNavigationItemSelected(int itemPosition, long itemId) {
		// TODO Auto-generated method stub
		// 初始化的时候会响应一次,跳过初始化的那一次响应
		if (i == 0) {
			i++;
			return false;
		}
		Toast.makeText(this, "pos:" + itemPosition, 1000).show();
		return false;
	}
}

当然,这个界面不是很友好(用arrayadapter或者spinner),那么最好就是自定义了。

5.pop:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/icon_search"
        android:showAsAction="collapseActionView|ifRoom"
        android:title="Search"/>
    <item
        android:id="@+id/menu_action_icon2"
        android:icon="@drawable/creep002"
        android:showAsAction="ifRoom"
        android:title="Action2">
        <menu>
            <item
                android:id="@+id/menu_icon1"
                android:icon="@drawable/creep001"
                android:showAsAction="ifRoom"
                android:title="Action1"/>
            <item
                android:id="@+id/menu_icon2"
                android:icon="@drawable/creep001"
                android:showAsAction="ifRoom"
                android:title="Action2"/>
        </menu>
    </item>

</menu>

弹出子组件,其实也可以使用分享组件。

注意:

1.android:showAsAction五个属性:
never:永远不会显示。只会在溢出列表中显示。
ifRoom:会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。
always:无论是否溢出,总会显示。
withText:Title会显示

collapseActionView:可扩展的item。


2.actionbar的设置:

actionBar.hide()   :

隐藏标题栏

actionBar.show()  :

显示标题栏

setHomeButtonEnabled这个小于4.0版本的默认值为true的。但是在4.0及其以上是false,该方法的作用:决定左上角的图标是否可以点击。没有向左的小图标。 true 图标可以点击  false 不可以点击。
actionBar.setDisplayHomeAsUpEnabled(true)    :

给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
actionBar.setDisplayShowHomeEnabled(true)   :

使左上角图标是否显示,如果设成false,则没有程序图标,仅仅就个标题,否则,显示应用程序图标,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME
actionBar.setDisplayShowCustomEnabled(true)  :

使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM
actionBar.setDisplayShowTitleEnabled(true)   :

对应ActionBar.DISPLAY_SHOW_TITLE。
其中setHomeButtonEnabled和setDisplayShowHomeEnabled共同起作用,如果setHomeButtonEnabled设成false,即使setDisplayShowHomeEnabled设成true,图标也不能点击。

mactionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP|ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_CUSTOM|ActionBar.DISPLAY_SHOW_TITLE);


3.背景:

bar.setBackgroundDrawable(getResources().getDrawable(R.drawable.BackBar));

backBar为定义在style xml中的,仅仅是更改背景颜色。

 <drawable name="BackBar">#123400</drawable>

如果想改变弹出的pop背景色,修改主题就可以,记得父主题不能是继承的其他自定义主题:

 <!-- Application theme. -->
    <style name="AppTheme" parent="android:style/Theme.Holo.Light">

        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="android:popupMenuStyle">@style/MyPopupMenu</item>
    </style>

    <style name="MyPopupMenu" parent="android:style/Widget.Holo.Light.ListPopupWindow">
        <item name="android:popupBackground">#0000ff</item>
    </style>

修改title的颜色的话,直接在使用的主题中改变textcolor就可以了:

 <item name="android:textColor">@color/white</item>

4.修改title的颜色

 <style name="acbar_titlestyle">
        <item name="android:textColor">@color/white</item>
    </style>
然后在actionbar的主题中引用:

<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">
         <item name="android:titleTextStyle">@style/acbar_titlestyle</item>


5.修改item字体:

MenuItem msgItem=imenu.findItem(R.id.menu_msg);
		SpannableString spanmsg=new SpannableString("消息");
		spanmsg.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanmsg.length(), 0);
		msgItem.setTitle(spanmsg);
另外,应该可以在style中更改样式的,可以没找到这个方法,有知道的给我说下哈!

6.仿微信的按menu弹出扩展item的方法。其实没啥技巧的,其实是布局的问题,要把扩展的showasaction item设置为可扩展。

例如:

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

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/action_settings"/>
    <item
        android:showAsAction="always"
        android:title="@string/action_settings"/>
    <item
        android:showAsAction="collapseActionView"
        android:title="@string/action_settings">
    </item>

</menu>

试试看吧,just go!



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值