Intereting Posts
Bluetooth-сервер с низким энергопотреблением Android Различные раскладки строк в ListView Запуск теста Gradle с Robolectric и AppCompat приводит к исключению NullPointerException Указанная ориентация не указана, а по умолчанию – горизонтальная. Это общий источник ошибок, когда дети добавляются динамически Периодическое отслеживание местоположения переднего плана на Android Android: тестирование instumentation для виджетов приложений Проверка на стороне сервера биллинга версии 3 для покупок в приложении Google Отрегулируйте панорамирование | отрегулируйте размер doen't, похоже, работайте над JellyBean 4.2.2-4.1.2 Вызывая ошибку java.IllegalStateException, No Activity, только при навигации по фрагменту для SECOND time Тип Mime для файлов .txt? Как реализовать ContentProvider для предоставления изображений в Gmail, Facebook, Evernote и т. Д. Как внедрять ежегодные и ежемесячные повторяющиеся сигналы тревоги? Запросить в Google Play магазине версию приложения? Custom android.app.Application не запускает onCreate event Как создать экран заставки / Запуск экрана, который исчезает после загрузки приложения? (Реагировать родной)

Новый ActionBarDrawerToggle при использовании AppCompatActivity

Сегодня Google обновил библиотеку AppCompat до версии 22.1.0, и теперь мы можем использовать AppCompatActivity вместо ActionBarActivity . Это означает, что нам больше не нужно иметь представление Toolbar в нашем макете действий.

Проблема в том, что для создания кнопки переключения Drawer я больше не могу использовать new ActionBarDrawerToggle , потому что он ожидает параметр Toolbar , которого не будет.

Как мне теперь добавить кнопку переключения в ActionBar?

Solutions Collecting From Web of "Новый ActionBarDrawerToggle при использовании AppCompatActivity"

Возможное решение

Мероприятия:

 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 .

Согласно официальным документам , класс ActionBarDrawerToggle из v7 содержит конструктор, не зависящий от панели:

 public ActionBarDrawerToggle (Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes) 

Это будет работать с ActionBar по умолчанию ActionBar предоставляемым через activity . Итак, как всегда, либо:

  1. Вы наследуете тему темы действия и вызываете new ActionBarDrawerToggle(...) ;
  2. Вы наследуете тему .NoActionBar , .NoActionBar / .NoActionBar объект Toolbar и вызываете new ActionBarDrawerToggle(..., Toolbar t, ...)

Полагает, что с рефакторингом ActionBarActivity ничего не изменилось.

Если вы используете настройку навигационного ящика Android Studio по умолчанию, то я нашел успех, изменив класс ActionBarDrawerToggle NavigationDrawerFragment.java с v4 на v7 в инструкции import и опуская аргумент Toolbar из конструктора ActionBarDrawerToggle .

Я не мог найти способ использовать панель инструментов AppCompatActivity по умолчанию, поэтому обходной путь, который я использовал, состоял в том, чтобы использовать тему Theme.AppCompat.NoActionBar и вручную добавить панель инструментов в XML, как я делал раньше.