问题标签 [android-layoutparams]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
412 浏览

android - android以编程方式在视图之间正确填充

我以编程方式创建了四个Textview并将其添加到我的Linearlayout.my 线性布局中,宽度为 216dp,而我以编程方式创建TextView的宽度和高度为 48dp。我想在TextView. 我写了一些代码,但我收到了这个结果

如您所见,填充不正确,因为右侧不正确

这是我的代码

我怎样才能在视图之间创建正确的填充programmatically?如果有人有解决方案,请帮助我,谢谢。

0 投票
0 回答
535 浏览

android - Android Windows:它们是何时以及如何创建的?

我已经阅读了标准的 Windows 相关文档并浏览了一堆源代码,试图了解 Android Windows 的创建方式和时间。我相信我已经拥护它,并希望对其进行验证或更正。

据我所知,只有两种方法可以获取 Window 对象的句柄。

在上述两种情况下,您都可以使用 getWindow 获取 Window 的句柄,然后使用该句柄操作 Window。

Windows 也可以通过使用 WindowManager 的 addView 方法来创建,但无法获得此类 Windows 的句柄。这是一个非常令人困惑的领域,因为 addView 方法本身并不意味着创建一个窗口,甚至视图管理器源代码中的注释也只是说明了以下内容。

因此,该方法似乎意味着将视图添加到现有窗口。然而, addView 的第二个参数是一个 WindowManager.LayoutParams 实例,除其他外,它指定了一个窗口类型(例如,TYPE_SYSTEM_ALERT),这意味着实际上正在创建一个窗口。事实上,情况就是这样。这是源代码中发生的事情的非常简短的概述。(对于新手:您可以在许多不同的网站上浏览源代码;我最喜欢的是http://grepcode.com。)

  1. WindowManager 实现了 ViewManager 接口,这是定义 addView 的地方。网址: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ViewManager.java#ViewManager.addView%28android.view。查看%2Candroid.view.ViewGroup.LayoutParams%29

  2. WindowManager 类的实际实现称为 WindowManagerImpl。它的addView 调用WindowManagerGlobal 的addView。网址: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/WindowManagerImpl.java#83

  3. WindowManagerGlobal 的 addView 是完成真正工作的地方。网址: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/WindowManagerGlobal.java#WindowManagerGlobal.addView%28android.view。 View%2Candroid.view.ViewGroup.LayoutParams%2Candroid.view.Display%2Candroid.view.Window%29

    1. 验证传入的参数是 WindowManager.LayoutParams。
    2. 如果 View 有父级,则调整布局参数。
    3. 确定新视图(又名窗口)是否为面板窗口(即子窗口)并进行处理。
    4. 创建一个新的 ViewRootImpl。
    5. 将 View、ViewRootImpl 和 WindowManager.LayoutParams 实例添加到单独的 ArrayList 中。
    6. 通过后者的 setView 方法将 View 和相关参数添加到 ViewRootImpl。
  4. ViewRootImpl 的 setView 方法然后做了一堆低级的工作。它会在各种错误情况下引发“无法添加窗口...”消息的变体异常。根据 ViewRootImpl 的主要评论,它是“视图层次结构的顶部,实现 View 和 WindowManager 之间所需的协议。这在很大程度上是 WindowManagerGlobal 的内部实现细节。”

    网址: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ViewRootImpl.java#ViewRootImpl.setView%28android.view。查看%2Candroid.view.WindowManager.LayoutParams%2Candroid.view.View%29

WindowManagerGlobal 似乎通过三个数组跟踪多个窗口。据我所知,ViewRootImpl 实际上是新窗口,它由 WindowManagerGlobal 管理。

综上所述,调用 addView 似乎确实创建了一个新窗口(虽然它被称为视图和窗口)但没有提供关联的 Window 类来访问它,因此开发人员不能处理它。

我的问题是:

  1. 除了上面提到的两个 getWindow 方法之外,还有其他方法可以获取 Window 实例的句柄吗?
  2. 实际上,addView 是否创建了一个 Window,如果是,有没有办法获得它的句柄?
  3. 上面还有什么不正确的吗?如果是,在哪些方面?

谢谢!巴里

0 投票
2 回答
6794 浏览

android - Android:ViewGroup.MarginLayoutParams 不起作用

我用它以编程方式设置边距,但它不起作用,边距未应用。在构造函数中:

0 投票
2 回答
955 浏览

android - FLAG_KEEP_SCREEN_ON 反向工作

这是一个奇怪的问题。

我之前使用的是: android:keepScreenOn="true"

在我的布局文件中保持屏幕在活动中,这工作正常。

但是,我想改进,以便仅在 Web 应用程序处于特定状态时才保持屏幕亮起。(如果用户愿意,他们仍然应该能够关闭屏幕,我实际上只是想禁用超时 - 只要活动处于活动状态,布局文件中的上述内容就会实现。)

为此,我在其中添加了一个 JavaScript 接口,WebView其中包含以下两种方法。

我已经注释掉了keepScreenOn布局中的设置。

现在Toast显示正确,但“保持屏幕打开”操作相反。

即当我听到Toast说屏幕将保持在它上面时,它会超时并在几分钟后切换。但是当我得到Toast允许屏幕关闭的说法时,屏幕实际上会一直亮着而不会超时。

我不明白这怎么可能。


好的,情节变厚了。

似乎它可能并不总是操作的逆转,但可能是随机的工作/不工作情况。

此外,查看 Android Studio 中的日志,我收到一条错误消息:

当方法被调用时。

但它有时确实有效。

上面显示的方法在 websiteViewActivity 类中,但不在 onCreate 方法中。恐怕我不知道这是否相关,或者如果相关,如何确保addFlagsandclearFlags在正确的线程中运行。

[编辑:这个问题解释了如何让事情在 UI 线程上运行,并摆脱了“仅原始线程”错误。]

为什么它有时会起作用(我不能说当它起作用时错误是否出现在日志中,因为我只在离开我的电脑进行测试时才看到它起作用)?

0 投票
0 回答
81 浏览

android - 如何在不同的行和列中显示图像?

`我有三种类型的图像数组,如小、中和大。如果第一个图像类型是数组中的小图像,则意味着我必须在屏幕左侧显示图像,然后如果它是中等图像类型,则表示它将出现在小图像的右侧,然后是下一个图像,如果它大意味着它将低于中小型图像。方式2是如果第一个图像类型很大,则意味着它必须以宽度而不是高度来填充屏幕。高度必须像 200 一样恒定。同样,每一行都有不同的行和列。我正在尝试像 Windows 开始屏幕一样。如何解决这个问题?提前致谢。

0 投票
0 回答
333 浏览

android-layout - 视图动画到底部时自动增加布局高度和宽度

我有三个视图(A、B 和 C),它们相互堆叠。因此,当我单击一个按钮时,两个视图(B 和 C)从视图 A 后面动画并向下滚动到底部。现在我的动画工作正常,但视图 B 和 C 延伸到屏幕外,我的屏幕高度没有增加。这是我的 layout.xml

而我的动画是简单的平移Y动画。

关于如何在两个视图动画到底部时增加布局高度的任何建议?

0 投票
15 回答
28541 浏览

android - 未知属性 android:layout_width、layout_height、id、gravity、layout_gravity、padding

  • 在所有 android 标签上出现未知属性错误。

  • 在布局 XML 中,自动建议未显示所有属性(如 layout_width、layout_height、orientation、orientation 和所有其他 android 属性。)

这是一个快照

在此处输入图像描述

在此处输入图像描述 我为解决这个问题所做的事情。

  • 清洁构建和重建
  • 删除 .idea 文件
  • 无效的缓存/重新启动..选项
  • 打开省电模式。

SDK 是最新的。

在应用级网格中

应用程序级别网格。

0 投票
1 回答
865 浏览

android - 如何更改现有布局参数的宽度和高度

请考虑它ImageView里面RelativeLayout有一些特定的布局参数RelativeLayoutImageView我需要根据屏幕尺寸以编程方式更改我的宽度和高度。

如何保存所有布局参数但只更改宽度和高度

以下代码创建空布局参数,但我需要保存旧参数并仅更改高度和宽度。

我怎样才能做到这一点?

0 投票
2 回答
691 浏览

android - 如何以编程方式创建两个等宽的 LinearLayout?

我正在尝试以LinearLayout编程方式创建两个宽度相等的: 在此处输入图像描述

但是我所有的线性布局都不可见(它们的宽度为 0)。我怎么能这样做?

0 投票
2 回答
85 浏览

android - 等价于 android:layout_above="@+id/foo"

在 XML 中,您可以执行以下操作:

使一个元素高于另一个元素foo

我如何以编程方式执行此操作?

虽然RelativeLayout.LayoutParams可以添加RelativeLayout.ABOVE不允许我指定我希望我的视图位于哪个元素上方的规则。