问题标签 [custom-view]

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 投票
1 回答
7994 浏览

android - 从 xml 创建自定义视图

我想像这样添加相同的水平可滚动按钮行

(toolbar.xml) 到我的应用程序中每个活动的底部。而不是必须为每个活动中的每个按钮指定单击侦听器,我希望能够在一个地方完成所有这些,然后每次只导入控件。我想我可以做类似的事情

在屏幕上包含按钮栏,然后执行类似的操作

但是然后呢?我如何真正让它显示?我应该覆盖其他方法吗?有更好/更合适的方法吗?

0 投票
2 回答
6605 浏览

android - android:如何使用属性集构造函数实例化我的自定义视图

我的自定义视图具有动态自定义属性,例如 backgroundimage 属性,通过当前周分配。我不想使用构造函数 CalendarView(Context context, AttributeSet attrs) 来传递几个属性,我尝试用 Xml.asAttributeSet 实例化属性集,但它不起作用。谁能告诉我该怎么做。

注意:我的自定义视图具有动态属性,所以我不想通过 xml 布局实例化自定义视图。我的解决方案不正确?

这是自定义视图:

这是活动:

0 投票
2 回答
8600 浏览

android - 自定义 ViewGroup 中的视图在大小更改后未呈现

我遇到了一个让我难过的问题,我希望有人能给我一些指示。

我正在开发一个使用自定义 ViewGroup(实际上是包含 RelativeLayout 的 FrameLayout)来呈现事件日历的应用程序。日历中的事件表示为根据事件的持续时间和包含视图的大小调整大小的视图。

我遇到了在调整包含 FrameLayout 大小时发生的问题。当前的实现删除了所有代表事件的视图,并尝试添加新的视图并根据 FrameLayout 的当前大小计算它们的大小。这项工作是通过 View 的 onSizeChanged() 方法触发的,该方法在 FrameLayout 中被覆盖。

调整视图大小时,将执行此代码并更新视图,但是,它们实际上都没有呈现在屏幕上…… FrameLayout 中包含的视图根本不可见。如果我在层次结构查看器工具中加载视图,它们是视图树的一部分,并在概述中它们应该在的位置上概述,但它们不显示。(请注意,视图在 FrameLayout 的初始渲染中可见......只有在调整大小后它们才会消失。)

调整大小期间的事件顺序似乎如下:

重置视图(在 onSizeChanged() 内部)后调用 requestLayout() 似乎没有效果。但是,如果我在调用 requestLayout() 之前造成一些延迟,视图就会变得可见。我可以通过产生一个线程并休眠来导致这种延迟,或者通过创建一个简单地调用 requestLayout() 并在自己调整大小后按下它的虚拟按钮,或者甚至是放在 onSizeChanged() 末尾的这个丑陋的 hack:

当我使用这个 hack 时,包含的视图是可见的,并且事件的顺序如下:

因此,似乎强制第二次测量通过(在修改视图树之后)会使包含的视图按应有的方式可见。为什么延迟对 requestLayout() 的调用对我来说是个谜。

任何人都可以提供任何关于我做错了什么的指示吗?

我意识到如果不查看一些代码,这有点难以理解,所以我创建了一个小示例应用程序来展示我的问题并在 Github 上提供:

https://github.com/MichaelSims/ViewGroupResizeTest

我上面提到的黑客致力于一个单独的分支:

https://github.com/MichaelSims/ViewGroupResizeTest/tree/post-runnable-hack

如果我可以提供任何其他信息,请提前告诉我并感谢。

0 投票
1 回答
6744 浏览

android - Android:调整自定义视图的大小。父级已调整大小,但宽度/高度更改未传递给子视图

我目前正在尝试使用 android 制作基于老式战舰棋盘游戏的游戏。我现在有点乱七八糟,试图感受一下它和我制作游戏可能需要的组件。

基本上我目前在我的布局 xml 文件中拥有以下内容:

我希望 BoardView 只占用屏幕的某个部分,即视图应该是我要在此视图中创建的内容的大小。在这种情况下是 2D 板。这是通过覆盖扩展 View 的 onMeasure() 方法来完成的。视图的宽度保持不变,但高度与宽度的值相同,给出了一个完美的正方形。

我通过覆盖视图 onSizeChanged() 函数并检查那里的值来检查视图尺寸是否已更改。

从布局文件中可以看出,我有一个 RelativeLayout 视图组,其中包含另一个名为 ShipView 的自定义视图作为子视图。理想情况下,我想要发生的是当我去测量它的尺寸时,它的尺寸已经被限制在 onMeasure 中设置的范围内。我以类似的方式通过其 onMeasure() 方法检查 ShipView 的尺寸。

日志文件向我显示以下内容(onMeasure() 方法似乎被多次调用,但所有值都相同,因此我不会费心显示多个日志,因为值都相同):

似乎当我通过 ShipViews onMeasure() 获取尺寸时,什么都没有改变并且忽略了我设置的尺寸限制。我不确定它是否与 ShipView 的 RelativeLayout 有关。既然它们已经改变,我是否必须为此设置 LayoutParams?我认为如果您更改父级的视图维度,它将被传递给子级。

对于这类游戏来说,这是否是正确的做法肯定有待讨论,但无论哪种方式,我都想知道它是如何做到的(我认为它可以......?)。任何帮助将非常感激。

0 投票
1 回答
999 浏览

android - 如何将按钮添加到显示位图的自定义视图

我有一个具有绘制位图的自定义视图的应用程序。我想在位图顶部的视图中放置一个按钮。活动的 setContentView 设置为自定义视图类,因此我无法从 main.xml 中为按钮充气。我该如何解决这个问题?是否可以在视图类中以编程方式创建一个按钮,然后附加一个侦听器?

公共类 Jjilapp 扩展 Activity {

}

0 投票
1 回答
2396 浏览

android - 在 xml 中声明时自定义视图不起作用

我有一个应用程序,它的活动有一个扩展视图的内部类。视图类显示一个位图,一切正常。我现在要做的是在显示位图的视图上放置一个按钮。为此,我将原始内部类 TouchView 设为单独的类。然后,我在相关布局内和按钮下方的布局文件夹中的 xml 文件中声明了它。我认为这会让按钮出现在视图顶部。我收到以下错误。有谁知道为什么?谢谢

代码:

在此处输入代码

布局:

0 投票
4 回答
7147 浏览

android - 错误膨胀复选框

我在 android 市场上的应用程序有奇怪的堆栈跟踪。我有一个包含两个视图的视图切换器,其中一个包含一个复选框。

我正在获取此堆栈跟踪 AdDetailView 作为自定义视图。

这发生在以下视图构造函数中:

线 67 是充气线。

问题是我无法在模拟器或设备上重现该问题。任何指针?

这是 ad_detail_view.xml

样式.xml:

bk_star_button.xml:

这是另一种布局,与某些设备上引发的完全相同的异常:

引发异常的代码:

topbar_toggle_button.xml :

0 投票
1 回答
1168 浏览

android - 在运行时创建的复合 Android 组件

问候。我正在做一个项目,并认为我会卷起一个复合组件。我将它们放在 xml 中,并编写了一个扩展 LinearLayout 的新类。基本上,我在一个活动中需要大约五六个。我想以编程方式在 Activity 中创建这些,因为我不知道在运行之前我需要多少。另外,我创建了一个 xml 文件来设置它们,我没有包括在下面。我发现的每种方法都有问题。

以下是我创建的扩展 LinearLayout 的类中的方法段:

在 Activity 内部,这两个解决方案似乎最接近我正在寻找的解决方案。

不知道从哪里获取使用此方法的属性:

不知道如何通过此方法指定充气机应使用 ExtendedLinearLayout:

我可能会满足于使用 ListView - 但对于五到六个项目来说似乎有点过分了。此外,之前曾与 Flex 合作过,这至少看起来是一个合理的问题解决方案。

谢谢,兰德尔

- - - - - - - - 更新 - - - - - - - - - -

我已经尝试过下面讨论的方法。设置完所有内容后,我将收到 InflationException: Binary XML file line #8: Error inflating class。我觉得xml 看起来还不错。我可能会感到困惑的一件事是在哪里调用充气机。现在,我在自定义类的 onFinishInflate() 以及 Activity 中调用充气器,如下所示:

在活动中:

谢谢,希望你有时间看看。我喜欢通过在网上四处挖掘来找出东西,但从昨天早上开始,这个已经让我煮了好几个小时了。我距离将其重构为 ListAdapter 大约有 2 英寸的距离。

- - - - - - - - 更新 - - - - - - - - - -

这是xml文件

0 投票
1 回答
4243 浏览

android - 向 ExpandableListView 组项添加按钮

我正在自定义 ExapndableListView,我正在尝试向 Group Item 添加一个 Button,

问题是,如果按钮是可聚焦的,则该组不会在单击时展开。我希望组正常展开并正常单击按钮。

有谁知道我怎么能做到这一点?

0 投票
3 回答
975 浏览

android - 自定义视图组上的九个补丁

我制作了一个九补丁和一个自定义视图组,然后我将该视图组的背景设置为九补丁。

问题是:九个补丁忽略了“内容区域”的设置。

那么:如何在自定义视图中正确使用九补丁?

或者:

我如何从九个补丁中获取内容区域,以便可以在 OnMeasure 和 OnLayout 数学上使用它?