ActionBar总结


如上图

1:home区

2:Custom区

3:item区

4:overflow区


1:home区图片改变可在MainFest.xml对应的activity加上属性icon

文字的修改可在属性label里面修改

<activity
android:name="com.example.actionbartest.MainActivity"
<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 18px; line-height: 26px;">android:label="@string/name"
android:icon="@drawable/weather" >

 
</activity>
图片也可以用

mActionBar.setIcon(R.drawable.book);//可以修改home区的图标
2:可以使用ActionBar的setCustomView(v);修改对应的视图
package com.liu.recorddemo;
import java.util.List;
import com.liu.recorddemo.db.DBHelper;
import com.liu.recorddemo.db.Record;
import com.liu.recorddemo.ui.RecordItemAdapter;

import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.LinearLayout;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;


public class MainActivity extends Activity {
	private ListView mList;
	private RecordItemAdapter recordAdapter;
	private DBHelper mHelper;
	private List<Record> data;
	private ActionBar mActionBar;


	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mActionBar = this.getActionBar();
		mActionBar.setDisplayHomeAsUpEnabled(true);
		mActionBar.setDisplayShowTitleEnabled(false);
		mActionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
				ActionBar.DISPLAY_SHOW_CUSTOM);
		mActionBar.setDisplayShowCustomEnabled(true);
		mActionBar.setIcon(R.drawable.book);
		mActionBar.show();
		setContentView(R.layout.list_all);
		init();


	}
	private LinearLayout linePre;
	private boolean isExpan = false;
	private int positionPre = -1;

	private void init() {
		mHelper = new DBHelper(this);


		mList = (ListView) findViewById(R.id.list);
		recordAdapter = new RecordItemAdapter(this);


		data = mHelper.getAll();
		recordAdapter.setData(data);
		mList.setAdapter(recordAdapter);
		mList.setOnItemClickListener(new OnItemClickListener() {


			@Override
			public void onItemClick(AdapterView<?> arg0, View v, int position,
					long arg3) {
				Log.d("haiyong.liu", "position=" + position);
				LinearLayout line = (LinearLayout) v
						.findViewById(R.id.expan_item);
				if (positionPre == position && isExpan) {
					line.setVisibility(View.GONE);
					isExpan = false;
				} else {
					if (linePre != null) {
						linePre.setVisibility(View.GONE);
					}
					line.setVisibility(View.VISIBLE);
					isExpan = true;
				}
				linePre = line;
				positionPre = position;


			}
		});

	}

	@Override
	protected void onResume() {
		super.onResume();
		data = mHelper.getAll();
		recordAdapter.setData(data);
		recordAdapter.notifyDataSetChanged();


	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);<span style="white-space:pre">	</span>//这里添加Item,也就是给ActionBar添加内容
		return true;
	}


	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.record_menu:
			Intent intent = new Intent();
			intent.setAction("com.liu.recorddemo.recordactivity");
			startActivity(intent);
			break;
		case android.R.id.home:<span style="white-space:pre">	</span>//home区的点击响应时间
			this.finish();
			return true;


		default:
			break;
		}
		return false;
	}


}

3:item区
@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);	//这里添加Item,也就是给ActionBar添加内容
		return true;
	}

4:我们看看menu目录下面的 main.xml文件

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

    <item
        android:id="@+id/record_menu"
        android:actionLayout="@layout/custom"
        android:orderInCategory="101"
        android:showAsAction="always"
        android:title="@string/record"/>
    <item
        android:id="@+id/mode3"
        android:actionLayout="@layout/custom"
        android:orderInCategory="102"
        android:showAsAction="always"
        android:title="@string/record_stop"/>
    <item
        android:id="@+id/mode4"
        android:actionLayout="@layout/custom"
        android:orderInCategory="103"
        android:showAsAction="always"
        android:title="@string/record_stop"/>
    <item
        android:id="@+id/mode5"
        android:actionLayout="@layout/custom"
        android:orderInCategory="104"
        android:showAsAction="always"
        android:title="@string/record"/>
    <item
        android:id="@+id/mode6"
        android:actionLayout="@layout/custom"
        android:orderInCategory="105"
        android:showAsAction="ifRoom"
        android:title="@string/record_stop"/>
    <item
        android:id="@+id/mode7"
        android:actionLayout="@layout/custom"
        android:orderInCategory="106"
        android:showAsAction="never"
        android:title="@string/record_stop"/>
    <!--
         <item
        android:id="@+id/mode5"
        android:showAsAction="always"
        android:orderInCategory="104"
        android:title="@string/record_stop"/>
    <item
        android:id="@+id/mode6"
        android:showAsAction="ifRoom|withText"
        android:orderInCategory="105"
        android:title="@string/record_stop"/>
     <item
        android:id="@+id/mode7"
        android:showAsAction="never"
        android:orderInCategory="106"
        android:title="@string/record_stop"/>
     
     <item
        android:id="@+id/mode9"
        android:orderInCategory="108"
        android:showAsAction="always"
        android:title="@string/record_stop"/>
    -->

</menu>
android:orderInCategory="108" //作用是item的排版先后顺序,数字越大越靠后
android:actionLayout="@layout/custom"<span style="white-space:pre">	</span>//item也可以是自己的布局文件

如果
android:showAsAction="always" //ifRoom never

如果设置为always则显示在bar上,如果设置为never,则把该item添加到overflow区,就是三个点的那里;或者有些手机是显示到menu键的响应按钮上面,如下图



还有一种ActionBar的视图,假如我们长按ListView的某一项,设置响应时间

package com.liu.recorddemo;

import java.util.List;

import com.liu.recorddemo.db.DBHelper;
import com.liu.recorddemo.db.Record;
import com.liu.recorddemo.ui.RecordItemAdapter;

import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.LinearLayout;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {
	private ListView mList;
	private RecordItemAdapter recordAdapter;
	private DBHelper mHelper;
	private List<Record> data;
	private ActionBar mActionBar;

	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mActionBar = this.getActionBar();
		mActionBar.setDisplayHomeAsUpEnabled(true);
		mActionBar.setDisplayShowTitleEnabled(false);
		mActionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
				ActionBar.DISPLAY_SHOW_CUSTOM);
		mActionBar.setDisplayShowCustomEnabled(true);
		mActionBar.setIcon(R.drawable.book);
		mActionBar.show();
		setContentView(R.layout.list_all);
		init();

	}

	private LinearLayout linePre;
	private boolean isExpan = false;
	private int positionPre = -1;

	private void init() {
		mHelper = new DBHelper(this);

		mList = (ListView) findViewById(R.id.list);
		recordAdapter = new RecordItemAdapter(this);

		data = mHelper.getAll();
		recordAdapter.setData(data);
		mList.setAdapter(recordAdapter);
		mList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View v, int position,
					long arg3) {
				Log.d("haiyong.liu", "position=" + position);
				LinearLayout line = (LinearLayout) v
						.findViewById(R.id.expan_item);
				if (positionPre == position && isExpan) {
					line.setVisibility(View.GONE);
					isExpan = false;
				} else {
					if (linePre != null) {
						linePre.setVisibility(View.GONE);
					}
					line.setVisibility(View.VISIBLE);
					isExpan = true;
				}
				linePre = line;
				positionPre = position;

			}
		});
		mList.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				
				showActionMode();<span style="white-space:pre">	</span>//长按ListView选项出现ActionBar
				return true;
			}

			
		});

	}
	private void showActionMode() {
		ModeCallBack cb = new ModeCallBack();
		startActionMode(cb);
	}
	
	private class ModeCallBack implements ActionMode.Callback{<span style="white-space:pre">	</span>//关键

		@Override
		public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
			// TODO Auto-generated method stub
			return true;
		}

		@Override
		public boolean onCreateActionMode(ActionMode arg0, Menu menu) {
			MenuInflater inflater = getMenuInflater();
			inflater.inflate(R.menu.menu_action_mode, menu); //添加item
			return true;
		}

		@Override
		public void onDestroyActionMode(ActionMode arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public boolean onPrepareActionMode(ActionMode mode, Menu arg1) {
			ViewGroup v = (ViewGroup) LayoutInflater.from(MainActivity.this).inflate(R.layout.custom, null);
			mode.setCustomView(v);
			return true;
		}
		
	}

	@Override
	protected void onResume() {
		super.onResume();
		data = mHelper.getAll();
		recordAdapter.setData(data);
		recordAdapter.notifyDataSetChanged();

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.record_menu:
			Intent intent = new Intent();
			intent.setAction("com.liu.recorddemo.recordactivity");
			startActivity(intent);
			break;
		case android.R.id.home:
			this.finish();
			return true;

		default:
			break;
		}
		return false;
	}

}

这种在下面显示的ActionBar要在MainFest.xml文件里面添加 android:uiOptions =" splitActionBarWhenNarrow "

<activity
            android:name="com.liu.recorddemo.MainActivity"
            android:theme="@android:style/Theme.Holo.Light"
            android:uiOptions="splitActionBarWhenNarrow" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

但是cumstomview还是在上方(图片上面的红字部分)


还有item和home的监听都是在函数里面

onOptionsItemSelected

home区的监听是 android.R.id.home

tip:零碎的点


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


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


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


tv = (TextView)findViewById(R.id.textViewId); 
        tv.setMovementMethod(ScrollingMovementMethod.getInstance());//设置TextView内容过多时,可以通过鼠标进行滚动
mActionBar.setIcon(R.drawable.book);//设置home区域的图标
android:uiOptions="splitActionBarWhenNarrow"下排显示actionbar的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值