【问题标题】:How to make RelativeLayout not take up the whole screen?如何让RelativeLayout不占满整个屏幕?
【发布时间】:2013-08-25 18:19:37
【问题描述】:

目前,我有一个以编程方式定义的相对布局

 RelativeLayout layout = new RelativeLayout(this);

然后我添加这样的文本视图和按钮

 layout.addView(myText, params);
 layout.addView(myBtn, param);

但是,这会使整个屏幕填满我的相对布局,我如何(以编程方式)设置仅特定数量的像素(dp)占用屏幕?我的目标是拥有像屏幕下半部分那样的相对布局

有什么帮助吗?

编辑:这是我最终想要实现的目标:http://i.imgur.com/n1ckBN7.png

我认为这(在 XML 中)可能对我有帮助

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">

在添加文本视图之前,我尝试将其转换为 java:

 parameters_layout = new 
         RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 
     200);
 layout.setLayoutParams(parameters_layout);

编辑 2 我尝试添加:

    parameters_layout.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
    parameters_layout.addRule(RelativeLayout.ALIGN_BOTTOM, RelativeLayout.TRUE);
    layout.setGravity(Gravity.BOTTOM);
    layout.setLayoutParams(parameters_layout);

仍然没有运气

【问题讨论】:

  • 实际上,新视图(和布局)的默认值是 WRAP_CONTENT。这意味着您应该提供更多代码供我们查看。也许您还应该展示您正在努力实现的目标的草图?

标签: android android-layout


【解决方案1】:

查看RelativeLAyout 的官方Android 文档。

http://developer.android.com/reference/android/widget/RelativeLayout.html

特别是,

setMinimumWidth(int)
setMinimumHeight(int)

例子:

layout.setMinimumWidth(500);
layout.setMinimumHeight(100);

如果您想设置 TextView/EditText 和 Button 的高度和宽度(如您的示例中所示)。

这是官方 Android 文档中的 API 参考。

编辑文本: http://developer.android.com/reference/android/widget/EditText.html

setHeight(int)
setMaxHeight(int)
setMinHeight(int)
setMaxWidth(int)

按钮: http://developer.android.com/reference/android/widget/Button.html

setHeight(int)
setMinWidth(int)

只需阅读官方文档,所有参考资料都在那里。 :)

【讨论】:

    【解决方案2】:

    您没有提供完整的代码示例,所以我假设您的 new RelativeLayout 是您活动的内容视图。

    setContentView( layout );
    

    这意味着你的父视图是一个框架布局,你需要创建一个FrameLayout.LayoutParams。该参数类型没有给你太多选择,只有gravity。你可以试试这个:

    RelativeLayout layout = new RelativeLayout(this);
    int halfScreenHeight = //calculate from DisplayMetrics
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(MATCH_PARENT, halfScreenHeight, Gravity.BOTTOM);
    setContentView( layout, params );
    

    ...但是这很尴尬。我认为在RelativeLayout 的上半部分插入一个空的View 会更容易。它仍然是全屏的,但不再是全屏了。

    【讨论】:

    • 我不使用 setContentView,因为我稍后会将此 RelativeLayout 添加到 WindowManager 对象中
    【解决方案3】:

    根据我在图像中看到的,您可以将所有内容放在覆盖所有内容的 relativeLayout 中,而底部视图与底部对齐(为此使用对齐父底部)。

    或者,您可以仅将底部(可以是您希望的任何布局)设置为在窗口本身内部具有“底部”的重力。

    事实上,不久前我问过关于创建一个透明背景的对话框,所以它可能对你有帮助。 here's the link 。据我了解,可以对活动采取非常相似的方法。

    【讨论】:

    • 我仍然没有运气(请参阅我的编辑)。我认为包含我稍后将此 RelativeLayout 添加到 WindowManager (insdie 一个 Serivce 类)的内容也很重要。我想在正在进行的活动之上放置一些东西,因此我遇到了与您类似的问题,因此我使用了具有 SYSTEM_ALERT_WINDOW 权限但不可编辑的 Service 和 WindowManager。我把它贴在这里,没有人能帮忙stackoverflow.com/questions/18424613/…
    • 好的,我已经在那里添加了我的答案。在这里,您可以再次将重力设置为您想要的任何值,就像我在您的问题上写的代码一样。
    • 好的,谢谢.. 如果我可以按照您的说明在另一个问题上分离 XML 文件,我不必担心这一点,因为我可以在 XML 中执行所有操作并将其带到爪哇。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2018-12-22
    相关资源
    最近更新 更多