1、在xml中添加如下内容:
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="@dimen/abc_action_bar_default_height_material"
android:layout_width="match_parent"
android:minHeight="@dimen/abc_action_bar_default_height_material"
android:background="?attr/colorPrimary"
/>
2、修改主题:
因为我们要将Toolbar嵌入到布局文件中,所以我们需要不支持ActionBar的主题。
所以,在确定在styles.xml文件中使用主题Theme.AppCompat.NoActionBar。
特别推荐,要在你的主题上添加如下所示的材料设计色彩项,这将很容易地实现对Toolbar和状态栏的着色(只有API 21+的设备上才会对状态栏进行着色):
<!-- Base application theme. -->
<span style="white-space:pre"> </span><style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- colorPrimary is used for coloring the Toolbar -->
<span style="white-space:pre"> </span> <item name="colorPrimary">#3F51B5</item>
<!-- colorPrimaryDark is used for coloring the status bar -->
<span style="white-space:pre"> </span> <item name="colorPrimaryDark">#303F9F</item>
<!-- colorAccent is used as the default value for colorControlActivated which is used to tint widgets -->
<span style="white-space:pre"> </span> <item name="colorAccent">#FFAB40</item>
</style>
3,将AppCompatDelegate添加到Activity里面
AppCompatDelegate是一个委托代表,它将AppCompatActivity的特性提供给Activity,而且只能通过create()方法创建,此时它需要两个参数,Activity和AppCompatCallback。
所以,首先,我们将Activity实现AppCompatCallback接口,在本例中,可以不必具体实现要覆盖的方法。
<pre name="code" class="java"> public class MainActivity extends Activity implements AppCompatCallback {
@Override
public void onSupportActionModeStarted(ActionMode mode) {
//let's leave this empty, for now
}
@Override
public void onSupportActionModeFinished(ActionMode mode) {
// let's leave this empty, for now
}
}
然后,在Activity的onCreate()方法中,
通过AppCompatDelegate.create()方法创建AppCompatDelegate;
调用AppCompatDelegate.create();(有些Activity的生命周期方法应用由该AppCompatDelegate代理)
通过AppCompatDelegate.setContentView()方法填充布局文件;
通过AppCompatDelegate.setSupportActionbar()将Toolbar添加给AppCompatDelegate。
private AppCompatDelegate delegate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<span style="white-space:pre"> </span>//let's create the delegate, passing the activity at both arguments (Activity, AppCompatCallback)
delegate = AppCompatDelegate.create(this, this);
<span style="white-space:pre"> </span> //we need to call the onCreate() of the AppCompatDelegate
delegate.onCreate(savedInstanceState);
<span style="white-space:pre"> </span> //we use the delegate to inflate the layout
delegate.setContentView(R.layout.activity_main);
<span style="white-space:pre"> </span> //Finally, let's add the Toolbar
Toolbar toolbar= (Toolbar) findViewById(R.id.my_awesome_toolbar);
delegate.setSupportActionBar(toolbar);
}
一个Activity只能链接到一个AppCompatDelegate实例,因此通过create()方法返回的实例应该保存在Activity里面直到该Activity被销毁。
自己有很长一段时间受这个问题干扰,而且并没有找到合适的解决的方案,希望可以帮到读者。
运行你的应用,然后Activity将拥有一个Toolbar,而且看起来和AppCompatActivity并没区别!