Android - SlidingPaneLayout - 在窗格上设置宽度

时间:2013-07-10 13:28:26

标签: android

我在我的活动中使用了SlidingPaneLayout:

<android.support.v4.widget.SlidingPaneLayout     xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myslidingpanelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<!-- menu left -->
<LinearLayout
    android:id="@+id/menu"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#8d305f"
    android:orientation="vertical" >
...
</LineareLayout>

<!-- main page right-->
<LinearLayout
    android:id="@+id/right_main"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical" >
...
</LineareLayout>
</android.support.v4.widget.SlidingPaneLayout>

我希望菜单覆盖我想要在所有手机上工作的页面的3/4,所以我不能举例如

android:layout_width="300dp"

我想计算屏幕宽度并将其设置为左侧窗格

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

只需查看滑动窗格的文档,看起来就像线性布局一样,可以使用

layout_weight

参数,用于设置基于百分比的宽度,因为父视图组是match_parent

在3/4 = 75%的情况下,你可以

android:layout_weight="0.75"

来自android docs http://developer.android.com/reference/android/support/v4/widget/SlidingPaneLayout.html

与LinearLayout类似,SlidingPaneLayout支持在子视图上使用布局参数layout_weight来确定在测量完成后如何划分剩余空间。它仅与宽度有关。当视图不重叠时,权重的行为与在LinearLayout中的行为相同。

当视图重叠时,可滑动窗格上的权重指示应调整窗格大小以填充处于关闭状态的所有可用空间。覆盖的窗格上的权重表示窗格的大小应该填充所有可用空间,除了用户可用于抓取可滑动视图并将其拉回到关闭状态的小的最小条带。

来自LinearLayout docs http://developer.android.com/guide/topics/ui/layout/linear.html#Weight

注意:您最终会将layout_width参数设置为0dp,因为视图组实际上会使用权重来排列孩子

答案 1 :(得分:2)

谢谢你,我找到了这个答案,并且它适用于我:

    int width;
    int height;
    if (android.os.Build.VERSION.SDK_INT >= 13){
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        width = size.x;
        height = size.y;
    }else {
        Display display = getWindowManager().getDefaultDisplay(); 
        width = display.getWidth();  // deprecated
        height = display.getHeight();  // deprecated
    }
    if(width>0&&height>0){
        LinearLayout layout = (LinearLayout)findViewById(R.id.menu);
        // Gets the layout params that will allow you to resize the layout
        LayoutParams params = layout.getLayoutParams();
        // Changes the height and width to the specified *pixels*
        params.height = height;
        params.width = width*3/4;
    }

答案 2 :(得分:0)

除了Selecsosi的答案,这是正确的,还有this view我写的总是将第二个项目显示为一个窗格(忽略默认的show-side-by-side-if-the - 适合行为)。正如名称所示,它可以环绕滑动视图。

您可以通过使用大量@dimen资源并根据swXXXdp-(port|land)切换它们或仅在运行时设置滑动视图的宽度来实现您之后的行为(我和#的东西) 39; m合理地肯定你也可以使用默认布局)。