2

我在我的活动中使用了 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"

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

感谢您的帮助

4

3 回答 3

3

只是查找滑动窗格的文档,看起来它的功能类似于线性布局,并且可以使用

layout_weight

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

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

android:layout_weight="0.75"

从 android 文档http://developer.android.com/reference/android/support/v4/widget/SlidingPaneLayout.html

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

当视图确实重叠时,可滑动窗格上的权重表示窗格的大小应调整为填充关闭状态下的所有可用空间。被覆盖的窗格上的权重表示窗格的大小应设置为填充所有可用空间,除了用户可以用来抓取可滑动视图并将其拉回关闭状态的最小小条。

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

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

于 2013-07-10T13:41:12.230 回答
3

谢谢大家,我找到了这个答案,它适用于我:

    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;
    }
于 2013-07-10T14:10:58.423 回答
1

除了 Selecsosi 的回答(这是正确的)之外,我还写了这个视图以始终将第二项显示为窗格(忽略默认的 show-side-by-side-if-the-fit 行为)。顾名思义,它可以环绕滑动视图。

您可以通过使用大量@dimen 资源并基于swXXXdp-(port|land)或仅在运行时设置滑动视图的宽度来切换它们来实现您所追求的行为(我有理由确定您也可以使用默认布局来执行此操作)。

于 2013-07-10T13:44:32.173 回答