【问题标题】:Combining NavigationDrawer and SlidingPaneLayout - SlidingPaneLayout from the right possible?结合 NavigationDrawer 和 SlidingPaneLayout - SlidingPaneLayout 从右边可能吗?
【发布时间】:2013-12-11 08:57:07
【问题描述】:

我在我的应用程序中使用NavigationDrawer 作为主菜单。我的一些片段使用SlidingPaneLayout

目前,我在右侧显示NavigationDrawer,在左侧显示SlidingPaneLayout,总是有点可见。

但我希望左侧的 NavigationDrawer 和右侧的 SlidingPaneLayout(就像在环聊中一样)总是有点可见。

问题:

我知道如何将NavigationDrawr 移到另一侧,但我不知道如何(如果可能)将SlidingPaneLayout 移到右侧?让它从右侧滑入...

我的解决方案

<android.support.v4.widget.SlidingPaneLayout
    android:id="@+id/sliding_pane_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/fragment_main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:layout_marginRight="0dp"
        android:orientation="vertical" >

        <include
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            layout="@layout/card_toast_container" />

        <FrameLayout
            android:id="@+id/fragment_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <!-- marginLeft: set it to width - 150 in your code!!! -->

    <FrameLayout
        android:id="@+id/fragment_slider"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:layout_marginLeft="0dp" />
</android.support.v4.widget.SlidingPaneLayout>

并使用一些包装方法,例如以下,以获得更容易和更易读的代码:

public boolean isSliderMenuShown()
{
    return !mSlidingLayout.isOpen();
}

public static void openSlider(boolean isSliderLeft, MySlidingPaneLayout slidingLayout)
{
    slidingLayout.closePane();
}

public static void closeSlider(boolean isSliderLeft, MySlidingPaneLayout slidingLayout)
{
    slidingLayout.openPane();
}

【问题讨论】:

  • 嗨@promo85,确实得到了将SlidingPaneLayout向右移动的任何解决方案。如果你找到了,请帮助我......
  • 我只是从一个开放的SlidingPaneLayout 开始...我在我的主帖中为您添加了一些代码,它应该解释如何将菜单放在右侧...

标签: android navigation-drawer slidingpanelayout


【解决方案1】:

将此设置为在导航抽屉内查看:

android:layout_gravity="left"

您可以尝试在开头保持打开状态:

SlidingPaneLayout sp = (SlidingPaneLayout) findViewById(R.id.spl);
sp.openPane();

同时将您的主要内容放在左侧,将菜单放在右侧

【讨论】:

  • 我知道如何将NavigationDrawer 放在左侧,我的问题是SlidingPaneLayout...我会在我的问题中更清楚地说明...
  • 尝试在开始时调用 openPane(),这样它的行为就像环聊一样。
  • 我必须提交,我没有考虑过这一点,虽然我有时会使用打开的SlidingPaneLayout 来打开活动...我会看看打开/关闭回调以及它们是否可以使用正确没有任何缺点...但我认为这确实可能是一个可能的解决方案...尽管我必须为此更改完整应用程序中的逻辑...
【解决方案2】:

经过我的研究和测试,android.support.v4.widget.SlidingPaneLayout 无法从右向左滑出。唯一的效果是从左向右滑动。 不管android:layout_gravity=startleftend还是right

【讨论】:

    【解决方案3】:

    您可以通过为您的滑动面板布局添加布局方向来实现这一点

    layout = (SlidingPaneLayout) findViewById(R.id.sliding_pane_layout);
            layout.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
    

    在此之前,请确保您已为清单文件添加属性 android:supportsRtl="true"

    【讨论】:

      【解决方案4】:

      第 1 步

      为了在您的应用中支持 RTL,您首先需要将 android:supportsRtl="true" 添加到清单文件中的元素中。

      第二步

      在 SlidingPaneLayout 中添加 RTL 支持

      android:layoutDirection="rtl"

      第三步 在 SlidingPaneLayout 的子视图中添加 LTR 支持

      android:layoutDirection="ltr"

          <SlidingPane
              android:id="@+id/slidingPanelLayout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layoutDirection="rtl">
      
              <include
                  layout="@layout/left_drawer"
                  android:layout_width="250dp"
                  android:layout_height="match_parent"
                  android:layoutDirection="ltr" />
      
              <include
                  layout="@layout/view_container"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:layoutDirection="ltr"
                />
          </SlidingPane>
      

      注意:在 left_drawer.xml、view_container.xml 中添加 LTR 支持

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        相关资源
        最近更新 更多