问题标签 [android-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.
android - 我的自定义视图仅在添加到 onCreate 时才会绘制
我制作了一个“GraphBar”自定义视图,它的底部是 a RelativeLayout
,其上方是高度不同的 。这是代码:TextView
ImageView
虽然添加这些 GraphBars 并设置它们的高度onCreate()
效果很好,但如果我创建它们 onClickSomething 或setBarHeight()
在创建的栏上再次调用,查看更改的唯一方法是加载视图层次结构。我在这里被告知这意味着我需要打电话给某个地方requestLayout()
。除了修改后还有什么地方mBarHeight
?有什么帮助吗?我到处都试过了,invalidate()
也试过了。
谢谢你,安德里亚
(如果您需要,我可以发布我进行测试的活动和 graphbar.xml)
I've found it's probably a bug. The workaround should be, again, calling requestLayout()
. Still i don't understand where i can put the call.
android - 添加自定义 ImageView 后强制关闭
我正在尝试向我的 . 添加一个自定义ImageView
,main.xml
但是如果我启动程序,它会以强制关闭方式关闭。
XML
:
Java
:
此外,如果我在 FC 之后在调试器中启动程序,我只会得到这个: link text
android - attrs.xml 中用于自定义视图的同名属性
我正在编写一些共享一些同名属性的自定义视图。在他们各自的<declare-styleable>
部分中,attrs.xml
我想为属性使用相同的名称:
我收到一条错误消息,myattr1
并且myattr2
已经定义。我发现我应该省略format
属性 formyattr1
和myattr2
in MyView2
,但如果这样做,我会在控制台中获得以下错误:
有没有办法我可以做到这一点,也许是某种命名空间(只是猜测)?
android - ANDROID:我的自定义视图没有完全绘制
我创建了一个扩展 View 的类,这是 onDraw 方法。该程序创建了一个迷宫并获得适当的高度和宽度读数,我似乎需要在 onDraw 方法中调用它们(否则它只会为两者返回 0)。这可能就是把一切都搞砸的原因。但是,它会根据所绘制视图部分中可见方块的间距获得正确的高度。
看起来未绘制的视图部分大约是上下文菜单的大小,并且与备件不匹配。我一直在寻找其他有这个问题的人,似乎没有其他人有这个问题,据我所知,我没有做任何与他们特别不同的事情。如果我可以提供任何其他见解,请告诉我。
我还不能发布图片,因为我对整个堆栈溢出的事情还是新手=(因此我试图尽可能地解释这个现象。
谢谢!
android - 如何从 XML 膨胀扩展的线性布局
任何人都可以提出改进这个 API8 示例的方法吗?虽然他们说视图可以在 XML 中定义,但实际上他们所做的是用 java 编写它们。我明白他们为什么要这样做。他们在扩展的 LinearLayout 中添加了一些成员,并且值是在运行时确定的。
哦,宇宙中的每个人都认为,布局指令应该迁移到 XML。但是对于这个应用程序,在运行时逻辑中保持原样设置文本是有意义的。所以我们有一个混合方法。膨胀视图,然后填充动态文本。我很难弄清楚如何完成它。这是来源和我尝试过的。
我想既然 LinearLayout 有一个 android:id="@+id/LinearLayout01",我应该可以在 OnCreate 中做到这一点
但它从来没有达到我添加的最小构造函数:
java - 跨 Android 应用程序使用的自定义视图和属性
我现在已经开发了几个 Android 应用程序,并创建了一个我经常在多个应用程序中使用的类的代码库。这段代码都在一个 subversion (svn) 存储库中,每个应用程序都在它自己的存储库中。然后每个应用程序都有所需包的 svn:externals 引用(例如,com.company.android.views)。这很好用,除非必须为自定义属性导入 R 类。
自定义视图具有如下导入:
这样它就可以有这样的代码:
该自定义属性在 res/values/attrs.xml 中定义:
这很好用,但是当我有第二个使用相同视图的应用程序时,问题就来了。现在我将导入更新为import com.company.apps.anotherapp.R
使其可以与“anotherapp”一起使用,并与“myapp”一起使用。当同时处理多个应用程序时,这会成为一个问题。
我的临时解决方案是检查适用类的更新,然后将 svn:externals 锁定到该特定版本。每个应用程序最终都被锁定到不同的版本,这很快就会变得混乱,但这似乎仍然比直接将各种类复制到应用程序的存储库中更好。
我想到的唯一其他解决方案是使用反射,例如:
然后遍历字段,将我关心的那些分配给整个班级使用的变量。不过,这似乎相当严厉,尤其是当我们可能谈论需要这样做的几个类时。
我该如何解决这个问题?有没有办法动态导入 com.company.apps.*.R 或以某种方式生成不依赖于特定应用程序的不同 R 类?还是有其他一些我完全错过的明显(或不那么明显)的解决方案?
android - Android:如何测试自定义视图?
Android中有几种单元测试方法,测试我编写的自定义视图最好的方法是什么?
我目前正在测试它作为我在仪器测试用例中活动的一部分,但我宁愿只测试孤立的视图。
android - 在复合视图小部件上保存状态
问题
当通过使用 XML 定义的小部件布局,各个小部件实例的组件都具有相同的 ID 时,如何保存视图小部件实例状态?
例子
NumberPicker
以小部件中使用的小部件为例TimePicker
(请注意,NumberPicker
它不向 SDK 公开)。这是一个简单的小部件,由三个组件组成number_picker.xml
:一个增量按钮、一个减量按钮和一个EditText
可以直接输入数字的按钮。为了让代码与这些小部件交互,它们都具有 ID(R.id.increment
分别为R.id.decrement
和R.id.timepicker_input
)。
假设您NumberPicker
在一个 XML 布局中有 3 个 s,并为它们指定了不同的 ID(例如R.id.hour
、R.id.minute
)。¹然后,此布局被扩展为活动的内容视图。我们决定更改活动的方向,因此Activity.onSaveInstanceState(Bundle)
有助于为每个具有 ID 的视图保存视图状态(这是默认行为)。
不幸的是,这三个NumberPicker
s 都有EditText
共享相同 ID 的 s — R.id.timepicker_input
。因此,当活动恢复时,视图层次结构中最底层的那个是其状态似乎为所有三个都保留的那个。NumberPicker
此外,无论保存时哪个具有焦点,恢复时焦点都会转到第一个。
TimePicker
通过单独保存状态本身来解决这个问题。不幸的是,如果没有更多的工作,这不会保留光标位置或焦点视图。我不确定它如何保持这种状态(如果它确实如此)(并且快速播放时间输入对话框似乎表明它可以以某种方式)。
请查看示例代码来演示此问题: https ://github.com/xxv/AndroidNumberPickerBug
¹ 在视图层次结构中,这会设置扩展为您的 ID 的 ID LinearLayout
。NumberPicker
android - 活动结束
我在活动中有两种类型的视图,即文本视图和网格视图。当我在网格视图中并且如果我按下“返回”按钮时,我必须在文本视图中获得焦点并继续这些功能,以便我可以再次访问网格视图。再次,如果我在文本视图中按下“返回”按钮,我需要完成我的活动。当我将 .setOnKeyListener() 提供给我的 gridview 时,我能够做到这一点。但是完成此操作后,网格视图中的焦点会丢失。那么,如何退出网格视图并进入文本视图呢?
android - 自定义视图上的 CastClassException
当我尝试findViewById()
在我的自定义视图上时,我不断得到一个ClassCastException
. 我已经尝试了很多东西,我确定我现在搞砸了代码!
为了确保我不会发疯,我将课程精简到最低限度,以便找出问题所在。
我是 android 编程的新手,我确定我缺少一些基本的东西。
这是BaseImageView
一个扩展视图类。
这是类LiveImageView
的扩展BaseImageView
。
这是布局my_view.xml
。
这是我的 Activity 中的 onCreate LiveViewActivity
。
最后,这是堆栈跟踪。