Нажатие кнопки справа при открытии выдвижного ящика

Я реализовал drawerlayout, который скользит справа, но не сдвигает активность так же, как в facebook (см. Ниже изображение). Как подтолкнуть текущую активность к правой стороне, когда пользователь нажимает кнопку opendrawer, как показано на рисунке выше. В настоящее время она появляется поверх активности и оставляет shadow.I действительно ценю любую помощь. Заранее спасибо.

Введите описание изображения здесь

Solutions Collecting From Web of "Нажатие кнопки справа при открытии выдвижного ящика"

Я не думаю, что вы можете реализовать его с помощью DrawerLayout , но с SlidingMenu вы можете, SlidingMenu GitHub здесь должен объяснить все, что вам нужно

Несмотря на то, что по умолчанию для слайд-активности нет возможности использовать навигационный ящик, мы можем сделать это с помощью кода. Как было предложено в приведенном выше ответе mick88, следующий фрагмент кода из моего проекта.

Файл profile.xml

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:facebook="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- Framelayout to display Fragments --> <RelativeLayout android:id="@+id/mainView" android:layout_width="match_parent" android:layout_height="match_parent" > </RelativeLayout> <!-- Listview to display slider menu --> <RelativeLayout android:id="@+id/drawerView" android:layout_width="240dp" android:layout_height="wrap_content" android:layout_gravity="start" > <ListView android:id="@+id/list_slidermenu" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/list_background" android:divider="@color/list_divider" android:dividerHeight="1dp" /> </RelativeLayout> </android.support.v4.widget.DrawerLayout> 

Сейчас в действии

 public class ProfileActivity extends ActionBarActivity { .... private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; RelativeLayout drawerView; RelativeLayout mainView; .... @Override protected void onCreate(Bundle savedInstanceState) { ............. // .............// drawerView = (RelativeLayout) findViewById(R.id.drawerView); mainView = (RelativeLayout) findViewById(R.id.mainView); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.app_name, R.string.app_name) { public void onDrawerClosed(View view) { supportInvalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { supportInvalidateOptionsMenu(); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); mainView.setTranslationX(slideOffset * drawerView.getWidth()); mDrawerLayout.bringChildToFront(drawerView); mDrawerLayout.requestLayout(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); } } 

Это не рекомендуется, но вы можете перемещать макет программно:

 @Override public void onDrawerSlide(View drawerView, float offset) { View container = findViewById(R.id.container); container.setTranslationX(offset * drawerView.getWidth()); } 

Чтобы ответить на ваш вопрос. DrawerLayout ведет себя так, как ожидалось.

Вы можете использовать Slidingmenu (или Umano ) в сочетании с DrawerLayout (я).

Наконец, в отношении того, что вы хотите (и что делает Facebook), Google сам не хочет, чтобы вы это делали. Они хотят, чтобы вы использовали ящик так, как они его используют в Google Music (например)

Об этом мне сказал именно Google:

  • Ящик навигации должен следовать новым правилам и должен быть реализован с использованием DrawerLayout и ActionBarDrawerToggle.
  • Ящик навигации не должен перемещать панель действий и должен отображаться как надпись над содержимым экрана.
  • В навигационном ящике должны быть только основные навигационные элементы. Избегайте отображения элементов в навигационном ящике, которые обычно помещаются в панель действий, например, «Настройки» или «Поиск». Blockquote

Так что не делайте то, что делает Facebook. (Это хороший совет в любом другом контексте) 🙂

Это действительно полезно. Поместите этот фрагмент в свой MainActivity.java

 ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); containerFrame.setTranslationX(slideOffset * drawerView.getWidth()); drawerLayout.bringChildToFront(drawerView); drawerLayout.requestLayout(); //below line used to remove shadow of drawer drawerLayout.setScrimColor(Color.TRANSPARENT); }//this method helps you to aside menu drawer }; 

ОП получил ответ. Но для кого-то, кто хочет этого эффекта, можно использовать SlidingPaneLayout . Он предназначен для этой цели.

В файле XML:

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/mainFrame" style="@style/MP.mainFrame" > <!--****************************Right Pane ****************************--> <LinearLayout style="@style/searchLayout"> <android.support.v4.widget.NestedScrollView style="@style/MP"> <LinearLayout style="@style/MP.verticalLinearLayout"> </LinearLayout> </android.support.v4.widget.NestedScrollView> </LinearLayout> <!--****************************Right Pane ****************************--> <!--****************************Left Pane ****************************--> <FrameLayout style="@style/MP.mainLayout"> <LinearLayout android:id="@id/fragmentContainer" style="@style/MP.fragmentContainer"/> <android.support.v7.widget.Toolbar style="@style/toolbar"> <ir.tooskar.excomponents.ExtendedTextView android:id="@id/appTitle" style="@style/WC.appTitle"/> <ir.tooskar.excomponents.ExtendedTextView android:id="@id/appBarSearchIcon" style="@style/WC.appBarSearchIcon"/> </android.support.v7.widget.Toolbar> </FrameLayout> <!--****************************Left Pane ****************************--> 

Есть две панели, справа и слева, держаться вместе и, таким образом, перемещаться вместе. Для меня левая панель является главной панелью, а справа скрывается значок переключения, чтобы отобразить ее. (Вид с id appBarSearchIcon ).

Помните, что есть одна группа представлений с именем SlidingPaneLayout , у которой всего двое детей: Left и Right .

И важная часть в деятельности:

  slidingPaneLayout = (SlidingPaneLayout) findViewById(R.id.mainFrame); // Sets a color for covering left pane(Main Pane) slidingPaneLayout.setSliderFadeColor(ContextCompat.getColor(context, R.color.searchPaneFadeColor)); // The listener for Opening the Right pane(Hidden pane) findViewById(R.id.appBarSearchIcon).setOnClickListener(new OnClickListener() { @Override public void onClick(View view){ slidingPaneLayout.openPane(); } }); 

Закрытие правой панели осуществляется с помощью API, так же как Navigation Drawer.