ToolBar使用方式:
注:ToolBar的使用必须继承AppCompatActivity,不能直接是继承Activity。而Fragment中使用Toolbar,则使用((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);这个方法加载。如果承载的activity中有menu,而fragment中又有自己发menu,那么需要在((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
之前加上setHasOptionsMenu(true);即可。
首先在styles.xml中
<!-- 关键点:去掉原生的acitonBar,即使用NoActionBar主题-->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
布局文件 activity_main.xml
xmlns:app=”http://schemas.android.com/apk/res-auto”
经常使用自定义控件的比较清楚这个的作用,有些直接使用不起作用,这时候就需要使用这个属性。
比如直接使用android:contentInsetStart=”0dp”会发现没有效果,这时候就需要改成app:contentInsetStart=”0dp”。
有时候自定义toolbar时前面会有一段空白间距,需要通过contentInsetStart属性去除这个间距。
<android.support.v7.widget.Toolbar
android:id="@+id/tools_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:contentInsetStart="0dp"
android:background="@color/colorPrimary"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:layout_gravity="center"
android:text="title"
/>
</android.support.v7.widget.Toolbar>
代码中 MainActivity.java
//得到toolbar对象
Toolbar toolbar = (Toolbar) findViewById(R.id.tools_bar);
//将toolbar原生title设为空
toolbar.setTitle("");
//将toolbar对象加入到actionbar中
setSupportActionBar(toolbar);
//得到toolbar中自定义控件,并进行处理
TextView title = (TextView) findViewById(R.id.text);
title.setText("标题");
SearchView使用方式:
在res下的menu文件夹下创建一个menu.xml文件。(没有menu文件夹可以自己在res下新建一个)
menu.xml文件内容:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
android:title="搜索"
app:showAsAction="always"
app:actionViewClass="android.widget.SearchView" />
</menu>
代码中 MainActivity.java
重写onCreateOptionsMenu方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//加载menu布局
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
//得到SearchView对象,SearchView一些属性可以直接使用,比如:setSubmitButtonEnabled,setQueryHint等
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setQueryHint("搜索");
//如果想单独对SearchView定制,比如需要更换搜索图标等,可以通过一下代码实现。
if(searchView != null) {
//"android:id/search_plate"这个值得到方式:通过跟踪SearchView源码,找到其布局对应的id
//这边修改的是点击搜索图标后展开界面的背景色,也可以根据不同的id修改对应的控件
int id = searchView.getContext().getResources().getIdentifier(
"android:id/search_plate", null, null);
LinearLayout layout = (LinearLayout) searchView.findViewById(id);
layout.setBackgroundColor(Color.WHITE);
}
return super.onCreateOptionsMenu(menu);
}
效果图:
demo:
demo下载地址