Intereting Posts
Какая новая версия диалогового окна запросов приложений в Android Facebook SDK 4.0.1 Ссылка build.gradle атрибут versionName в макете xml Установите фактическое заполнение текста в TextView с составными чертежами Почему setBackgroundColor не работает в моем пользовательском listView Можно ли использовать выпадающие меню AND в качестве навигации в панели действий? Reverse Engineer Android APK, чтобы получить код? Обнаружение события касания кнопок навигации внутри службы, имеющей окно Ошибка Cocos2d-x при компиляции LOCAL_SRC_FILES указывает на отсутствующий файл (и папку) Windows Custom DialogFragment с различными анимациями для разных ориентаций Изменение положения MediaController при вращении Уменьшите внутреннюю логарифмическую логику ORMlite или отключите ее. Android Nexus 7 Jelly Bean: startPreview / takePicture, вызывающий getCameraStereoMode регистрирует ошибку Что такое Google Web Driver в Android SDK Manager? OKHTTP 3 Отслеживание Многостраничный процесс загрузки Расчет размера Appwidget

Android DrawerLayout не работает при использовании TOP и BOTTOM gravities

Я просто играю с новым DrawerLayout, недавно включенным в библиотеку поддержки. Я реализовал просто простую, например, с несколькими ящиками, в то время как я использовал START и END в качестве гравитации, все это работало как шарм, но при попытке добавить ящик с помощью TOP или BOTTOM гравитаций он падает.

Можно ли использовать его для выдвижных ящиков сверху и снизу?

Ниже приведен полный код моей активности и макет xml в рабочем состоянии; Если я попытаюсь изменить это:

<ListView android:id="@+id/right_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="end" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#007799"/> 

В это (обратите внимание на изменения layout_width, layout_height и layout_gravity):

 <ListView android:id="@+id/right_drawer" android:layout_width="match_parent" android:layout_height="300dp" android:layout_gravity="bottom" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#007799"/> 

И строка:

 this.drawer.openDrawer(GravityCompat.START); 

Info this:

 this.drawer.openDrawer(Gravity.BOTTOM); 

Когда я получаю следующую ошибку:

 05-16 05:22:33.981 1503-1503/es.luixal.test E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{es.luixal.test/es.luixal.test.MainActivity}: java.lang.IllegalArgumentException: View android.widget.RelativeLayout{42664c80 VE.... ......I. 0,0-0,0} is not a sliding drawer at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) at android.app.ActivityThread.access$600(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5039) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalArgumentException: View android.widget.RelativeLayout{42664c80 VE.... ......I. 0,0-0,0} is not a sliding drawer at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:970) at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:1003) at es.luixal.test.MainActivity.onCreate(MainActivity.java:30) at android.app.Activity.performCreate(Activity.java:5104) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) ... 11 more 

Любые подсказки, почему я не могу использовать другие гравитации?

Благодаря!

MainActivity.java

 package es.luixal.test; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { private DrawerLayout drawer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // filling list items: ListView listView = (ListView)findViewById(R.id.left_drawer); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{ "MenuItem 1", "MenuItem 2", "MenuItem 3" }); listView.setAdapter(adapter); // this.drawer = (DrawerLayout)findViewById(R.id.drawer_layout); this.drawer.openDrawer(GravityCompat.START); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override protected void onStart() { super.onStart(); } } 

activity_main.xml

  <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Hi!" /> </RelativeLayout> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#44aa00"/> <ListView android:id="@+id/right_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="end" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#007799"/> </android.support.v4.widget.DrawerLayout> 

Нет официальной ссылки на DrawerLayout на использование «Bottom» или «Top» Gravity – Source

Public void openDrawer (int gravity)

Откройте указанный ящик, оживив его вне поля зрения.

Параметры гравитации

Gravity.LEFT, чтобы переместить левый ящик или Gravity.RIGHT справа. GravityCompat.START или GravityCompat.END также могут быть использованы.

Если вы хотите использовать другие визуальные эффекты – используйте другую библиотеку

Недавно мы реализовали эту функциональность в приложении Umano и открыли ее:

https://github.com/umano/AndroidSlidingUpPanel

Библиотека Menu-Drawer от Simon Vig Therkildsen хорошо работает как стандартный выдвижной ящик меню, но также поддерживает верхние и нижние ящики. В его образце приложения есть примеры того, как реализовать меню с помощью TOP / BOTTOM gravities.