今日、GoogleはAppCompatライブラリをバージョン22.1.0に更新し、AppCompatActivity
の代わりにActionBarActivity
を使用できるようになりました。つまり、アクティビティレイアウトにToolbar
ビューを含める必要がなくなりました。
問題は、Drawerトグルボタンを作成するためにnew ActionBarDrawerToggle
を使用できないことです。これは、存在しないToolbar
パラメータを想定しているためです。
トグルボタンをActionBarに追加するにはどうすればよいですか?
可能な解決策
アクティビティ:
import Android.os.Bundle;
import Android.support.v4.widget.DrawerLayout;
import Android.support.v7.app.ActionBarDrawerToggle;
import Android.support.v7.app.AppCompatActivity;
import Android.view.MenuItem;
public class MainActivity extends AppCompatActivity
{
DrawerLayout drawerLayout;
ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
toggle = new ActionBarDrawerToggle
(
this,
drawerLayout,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
{
};
drawerLayout.setDrawerListener(toggle);
toggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (toggle.onOptionsItemSelected(item))
{
return true;
}
return super.onOptionsItemSelected(item);
}
}
レイアウト:
<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<ListView
Android:id="@+id/list_drawer"
Android:layout_width="240dp"
Android:layout_height="match_parent"
Android:layout_gravity="start"
Android:background="#f1f2f7"
Android:choiceMode="singleChoice"
Android:divider="@Android:color/transparent" />
</Android.support.v4.widget.DrawerLayout>
スタイル :
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
</resources>
アプリがAppCompatテーマを継承することが重要です。
アクションバーをツールバーに置き換えた場合は、styles.xmlで次の行を削除して、アクションバーを戻すことを忘れないでください。
<item name="windowActionBar">false</item>
Gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:support-v4:22.1.1'
compile 'com.Android.support:appcompat-v7:22.1.1'
}
このコードをgithubに配置します: https://github.com/bbouabou/AppCompatActivity-With-ActionBarDrawerToggle 。
official docs のとおり、v7のActionBarDrawerToggle
クラスは、ツールバーに依存しないコンストラクターを備えています。
_public ActionBarDrawerToggle (Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)
_
これは、ActionBar
を通じて提供されるデフォルトのactivity
で動作します。だから、いつものように、次のいずれか:
new ActionBarDrawerToggle(...)
を呼び出します。.NoActionBar
_テーマから継承し、Toolbar
オブジェクトをインスタンス化/インフレートし、new ActionBarDrawerToggle(..., Toolbar t, ...)
を呼び出しますActionBarActivity
リファクタリングで何も変わっていないように見えます。
Android Studioのデフォルトのナビゲーションドロワーセットアップを使用している場合、NavigationDrawerFragment.Java
のActionBarDrawerToggle
クラスv4
〜v7
をimport
ステートメントで使用し、Toolbar
引数をActionBarDrawerToggle
コンストラクターから省略します。