Actionbar是使用

刘阳舒
2023-12-01

第一步,为了兼容更低的版本,首先得引入V7的包,并且将Activity继承于ActionBarActivity,这个是为了兼容低版本,如果你的应用是3.0以上,这一步可以省略

第二步,将在manifest文件中将主题替换为@style/Theme.AppCompat.Light

好了,一个基本的Actionbar就创建好了


接下来,给Actionbar创建右边的按钮(也就是别人经常说显示不了的那三个点)


第一步,在resources/menu文件夹下,修改菜单布局(这个是官网拷贝过来的),

里面只有一个item,也就是只显示一个按钮,这个按钮是搜索按钮


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

    <!-- Search, should appear as action button -->
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/action_search"
       
        yourapp:showAsAction="ifRoom"/>

</menu>



第二步,在Activity中重载 onCreateOptionsMenu(Menu menu)方法


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;
	}

这样这个按钮就添加完成了,

如果想给按钮设置一下点击事件,就在onOptionsItemSelected(MenuItem item)方法里判断下点击对应的id


@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		switch(item.getItemId()){
		case R.id.action_bar:
			Log.i("huang", "搜索");
			break;
			
		}
		return super.onOptionsItemSelected(item);
	}


如果想让这个按钮带有搜索功能的,就在res/menu文件夹下按钮对应的item里加这一个属性

 yourapp:actionViewClass="android.support.v7.widget.SearchView"

,这是一个兼容的低版本的属性,你的应用不需要兼容低版本,就设置这个就行了

android.widget.SearchView

这样子,点击搜索的按钮,一个搜索的编辑框就出来,这时候你还不能监听搜索框,想要监听需要自己去设置,

 onCreateOptionsMenu(Menu menu)方法里添加监听的方法

@SuppressLint("NewApi")
	@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);
		
		//得到搜索编辑控件,并进行监听
		SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setOnQueryTextListener(MainActivity.this);
		return true;
	}

如果你的应用程序不需要兼容低版本,就很好办了,直接导默认的包,就可以了,如果需要兼容低版本,就需要用v7的包,而且SearchView.getActionView();这个方法还需要通过注解标记为@SuppressLint("NewApi")这样,代码有提示


设置了监听之后,需要重载两个方法


//输完内容后,点击回车的时候回调
	@Override
	public boolean onQueryTextSubmit(String query) {
		// TODO Auto-generated method stub
		return false;
	}

	//搜索框的内容变化是回调
	@Override
	public boolean onQueryTextChange(String newText) {
		
		// TODO Auto-generated method stub
		
		Toast.makeText(this, newText, 1).show();
		return false;
	}

好了,大功告成



接下来,还没完,如何修改Actionbar的标题呢,很简单,只需在在Manifest文件的Activity节点中,设置下android:label="应用详情"这个属性即可,

还有,如何让这个标题响应点击事件呢,也简单,在当前Activity中写几行代码


//得到Actionbar对象
		ActionBar actionBar = getSupportActionBar();
		//设置标题可以响应点击事件
		actionBar.setDisplayHomeAsUpEnabled(true);


@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		//android.R.id.home,这个是actionbar标题的id
		if(item.getItemId()==android.R.id.home){
			finish();<pre name="code" class="html"><activity android:name="com.example.mygoogleplay.AppDetail" 
            android:label="应用详情"
             android:parentActivityName="com.example.mygoogleplay.MainActivity"
            >
            <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.mygoogleplay.MainActivity" />
        </activity>

}return super.onOptionsItemSelected(item);}

 

也可以在Manifest文件中配置,个人推荐用代码,感觉这样配置好麻烦


<activity android:name="com.example.mygoogleplay.AppDetail" 
            android:label="应用详情"
             android:parentActivityName="com.example.mygoogleplay.MainActivity"
            >
            <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.mygoogleplay.MainActivity" />
        </activity>





 类似资料: