閉じる

android.support.v7.widget.Toolbar

ActionBarに代わる物らしい。

レイアウトに android.support.v7.widget.Toolbarを追加。*1 *2

<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />

ActionBarを含まないテーマに設定。*3 *4

<resources>

<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.NoActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

</resources>

後は ActionBarActivityを継承した Activityから setSupportActionBarで設定する。

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

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

以後、getSupportActionBarが返すのは Toolbarのインスタンスをラップした SupportActionBarとなる。*5

で、ActionBarを置き換えた結果何のメリットがあるのかはまだ不明。
とりあえずいじれるようにしてから調べようと言うことで。

FYI: AppCompat v21 – Material Design for Pre-Lollipop Devices!


*1 どこに配置しても良いようなのだけど、DrawerLayout/SlidingPaneLayoutのように制限がある場合にどうすれば正解なのかはを探し中。DrawerLayoutの場合は contentsと一緒に LinearLayoutなり RelativeLayoutでくるんでしまって問題ないようだけど、SlidingPaneLayoutではうまくいかない。

*2 android – How do I use DrawerLayout to display over the ActionBar/Toolbar and under the status bar? – Stack Overflowによれば DrawerLayoutに関しては正解らしい。

*3 通常はバージョン別に複数の xmlファイルに分散しているので注意。

*4 後述の setSupportActionBarを呼び出したときに「既に ActionBarあるんだけど?」というエラーになる。

*5 テーマで ActionBarを含まないようにしているので、setSupportActionBarを呼び出すまでは getSupportActionBarは nullを返す点に注意。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)