- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个可以在屏幕上拖动计数器的游戏。我想为每个计数器使用 ImageView
subview ,并在 FrameLayout
父 View 内设置绝对位置。
我读过一些关于各种布局类相对于已弃用的 AbsoluteLayout
的优势的文章,并且我不想使用 RelativeLayout
因为计数器必须是彼此独立移动。这些帖子似乎都没有解决我遇到的特定问题,但如果有人能指出我遇到的具体问题,我会很高兴。
这是布局 XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_game"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff808080">
</FrameLayout>
因为我不想对屏幕的大小做出假设,所以我在 onMeasure()
中将每个子项的大小设置为父项大小的一部分:
package uk.co.fractalmaze.counterspin.widget
import android.content.Context
import android.graphics.Color
import android.util.Log
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
class CounterView(context: Context, private val label: String, private val offset: Int) : ImageView(context)
{
init
{
// Set the background color.
val color = if (offset > 0) Color.GREEN else Color.RED
setBackgroundColor(color)
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int)
{
// Set the position and size.
val parentWidth = MeasureSpec.getSize(widthMeasureSpec)
val parentHeight = MeasureSpec.getSize(heightMeasureSpec)
val size = Math.min(parentWidth, parentHeight) / 2
val left = offset * size
Log.i(javaClass.simpleName, "Parent size ($parentWidth, $parentHeight) to $label child position ($left, 0) size $size")
setMeasuredDimension(size, size)
layoutParams = createLayoutParams(left, 0, size, size)
}
private fun createLayoutParams(left: Int, top: Int, width: Int, height: Int): ViewGroup.LayoutParams
{
// Create a margin params object.
val params = FrameLayout.LayoutParams(width, height)
params.leftMargin = left
params.topMargin = top
return params
}
}
为了完整起见,我将 subview 添加到父 View 中:
package uk.co.fractalmaze.counterspin.activity
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.FrameLayout
import uk.co.fractalmaze.counterspin.R
import uk.co.fractalmaze.counterspin.widget.CounterView
class GameActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
// Call the superclass.
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_game)
// Add a left and right view to the group.
val group = findViewById<FrameLayout>(R.id.activity_game)
group.addView(CounterView(applicationContext, "left", 0))
group.addView(CounterView(applicationContext, "right", 1))
}
}
这是结果的屏幕截图:
我希望红色和绿色的 subview 并排出现并填满屏幕,但它们加在一起只占据宽度的一半。 logcat 输出证实了这一点,其中显示 MeasureSpec
解码的父宽度为 1080,然后为 540,导致子宽度为 540,然后为 270。这是在模拟 Pixel 3 上运行的,其屏幕为 1080 像素宽度:
2019-05-09 22:06:33.493 15575-15575/uk.co.fractalmaze.counterspin I/CounterView: Parent size (1080, 1808) to left child position (0, 0) size 540
2019-05-09 22:06:33.493 15575-15575/uk.co.fractalmaze.counterspin I/CounterView: Parent size (1080, 1808) to right child position (540, 0) size 540
2019-05-09 22:06:33.560 15575-15575/uk.co.fractalmaze.counterspin I/CounterView: Parent size (540, 540) to left child position (0, 0) size 270
2019-05-09 22:06:33.561 15575-15575/uk.co.fractalmaze.counterspin I/CounterView: Parent size (540, 540) to right child position (270, 0) size 270
谁能告诉我:
最佳答案
使用LinearLayout
而不是FrameLayout
,例如:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="2">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#ff0000">
<!--child 1-->
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#00ff00">
<!--child 2-->
</LinearLayout>
</LinearLayout>
关于java - 用 subview 网格填充屏幕,但 subview 的大小是预期大小的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067898/
我在自定义表格单元格中长按时添加 subview ,但是当我滚动表格时, subview 消失。 p> 我应该怎么做,以便当我向后滚动时,该 subview 仍然显示/出现在该单元格上,或者换句话说,
如何遍历 UIView 的所有 subview ,以及它们的 subview 和它们的 subview ? 最佳答案 使用递归: // UIView+HierarchyLogging.h @inter
如果我有 contentView 和 2 个 subview 。我想根据subviewB居中subviewA subviewA 和 subviewB 有相同的父 View 。 这就是我现在正在做的,将
我想向 self.view 添加一个覆盖整个区域的 subview (如调光 View )。但在它下面,有一些 View 我不希望受到添加的 subview 的影响(我不希望这些 View 具有变暗的
我正在尝试向 UITabBar 添加 subview ,它应该位于其他 UITabBar subview 之后。 我在 UITabBarController 的子类中添加了这样的 subview :
图像描述了我必须将这种 subview 添加到我现有的单元格中,并且在多次单击“添加”图标时还要添加相同的 subview 。 我在添加 subview 时遇到困难。如果有人能为我提供处理此结构的正确
我添加了一个 subview ,如下所示: func showPlayerView2() { self.view.frame = CGRect(x: 0, y: 0, width: view.
我的问题是关于 UIView/CALayer: Transform triggers layoutSubviews in superview 据报道,来自苹果的 TSI 回复: Generally,
我试图为我的主视图创建一个辅助 View 。这个 subview 需要很小的高度,它需要适合另一个带有标签的大 UIView。 问题是当我使用 UIView addSubview 时,第三个 UIVi
我正在尝试淡出整个 View ,但只有一个特定的 subview , 这将强调 subview更清晰的外观。假设 self.view 有 5 textfields和 2 UIView如subviews
我确信我在这里错过了一些愚蠢的东西,但我有 mainView、subviewA 和 subviewB。我试图将 subviewB 添加到 subviewA 并将其锚定在 subviewA 内部,但是它
我有一个包含 3 个 subview 的 View ,分别称为 view A、view B、view C。 当我删除 subview 时,意味着我需要自动设置边距以进行调整。 当我删除 view A
我有两个加载的 subview 。一个是位于 View Controller 内部的选项卡栏,它很早就加载,第二个是按下选项卡栏项目时出现的 View 。 但是,当添加此 subview 时,它会加载
在 iOS 应用中,我在主视图中添加了一个 subview : [self.view addSubview:firstUIImageSubview]; 但是在 subview 类 firstUIIma
我正在制作一个球程序,您可以通过长按手势将球 UIView subview 添加到 super View 。点击 View 会将其从父 View 中移除。 添加所有 View 效果很好,重新添加 Vi
我使用以下代码在单击按钮时将日期选择器 View 添加到我的应用程序主视图。 - (IBAction)CalenderButton_Click:(id)sender { // code to add
我正在努力向 View 添加 subview 。进度变量在其 View Controller 的 viewDidLoad() 中设置。 progressView frame size 设置正确,只是添
这是我的代码 var button = [UIButton?](count:3, repeatedValue: UIButton()) for i in 0...2{
我有一个 UIViewController,里面有几个不同的 UIView subview 。当用户调用某个 Action 时,我手动更改每个的大小、比例和位置。我想更新其中一个 UILabel( s
我的屏幕有一个主视图模型。它由 2 个 subview 模型组成。 其中一个负责注册部分。其中一个处理登录部分。其中一个负责处理菜单部分(如果经过身份验证,可以显示哪些菜单项,以及“欢迎“用户名”类型
我是一名优秀的程序员,十分优秀!