作者HuangJC (吹笛牧童)
看板java
标题[问题] 请问 android 的 xml 怎麽动态呼叫
时间Fri May 13 12:59:21 2016
题目不是讲得很清楚
1.其实是我有一个 HorizontalScrollView 元件,在 xml 中这样描述
<HorizontalScrollView
android:id="@+id/view1"
android:scrollbars="none"
android:layout_width="match_parent"
android:layout_height="match_parent" >
若我有需要动态更改尺寸,座标,这些都不难,有相对应的 api
难就难在不是所有 xml 都有 api
这时就很希望可以直接控制 xml
如此例中的 android:scrollbars="none" 这一句
有时我希望有,有时希望没有,若能动态控制 xml 会比较乾脆
2.另一个方法是呼叫
view1.setHorizontalScrollBarEnabled(horizontalScrollBarEnabled);
明明看文件,这就是我要的
但做下去却不如预期
因此请教如何让这个 api 动起来
以及当 api 不如预期时,有没有动态控制 xml 的方法
(呼叫起来像 view1.parseXML("android:scrollbars=\"none\""); 这样)
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.251.197.63
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1463115564.A.203.html
1F:→ ssccg: xml的属性只有在View的contructor传入,怎麽使用这些属性是 05/13 14:30
2F:→ ssccg: View的内部实作,xml在inflate完就没用了,不存在何来控制 05/13 14:37
re-parse 一部份,然後变成对应的内部 api 帮我 call 罗 :P
我的想法是,属性是可以不断增加的,而 api 很难再增加
所以追不上属性的数量;但内部 private function 总有法子的
3F:→ ssccg: 至於set method无效的问题,有呼叫View.invalidate? 05/13 14:45
没,但我找到问题了 :P 见下述
4F:推 LaPass: 2是对的,但不如预期不确定是怎麽一回事 05/13 16:30
其实我 google 很久,用我破破的英文看别人的说明,蛮辛苦
(大多是 stack overflow;这站名.. 堆叠满出来?看了就觉得我程式坏了 :P)
有人说除了设 enable, 还必需要做个 initialize
trace 进入 lib 的 source code 是有看到这个 initialize,但我呼叫不到啊
刚突然想通:我不能 initialize,但我可以一开始就 initialize
也就是说,xml 里先设 none (disable)
然後在程式中以 api 设 enable, 这是打不开的
但反过来,xml 里先 enable (其实都不要打,default 就是了)
然後程式中以 api 设 disable, 是关得掉的
这样就行啦~ 原来是要用 default on 的写法 :P
※ 编辑: HuangJC (60.251.197.63), 05/13/2016 19:19:05
5F:→ ssccg: API怎麽会不能增加,属性怎麽会可以增加? 05/13 20:24
我常常在看 source code 时觉得
"这 private function or variable 如果 public 给我用就好了"
那为什麽不 public?
不是能不能的问题,常是肯不肯的问题
c++ 还好,有时 protected 的,我就继承一下,转 public
java 倒狠了,有一招叫 final, 不得再继承
这... 是要我承认 java 在安全性锁权限上更严密吗?
那属性为什麽我以为可以增加呢?
嗯,其实在 compiler 和 script 的比较上
script 常让我觉得弹性超强;一开始没说有的功能,以後再定义,再冒出来就好了
实际上我就是很多控制项觉得 xml 里有,但相对的 api 没有
因此我就是觉得不是做不到,而是不肯做
或要下一版才公开
我同事用很多 reflect function, 也让我有这个感觉
这些功能早就写好了,但就是封在肚子里
API 是没有,但绕个圈用 reflect 就拿出来了..
6F:→ ssccg: Java API和XML attr一样都是API的一部分,没有哪个容易增加 05/13 20:25
7F:→ ssccg: 哪个不容易,你都看了source应该知道那些attr、value都是已 05/13 20:27
8F:→ ssccg: 经compile成对应的Java constant了吧 05/13 20:27
看 source 也常让我觉得很奇怪,经常行数是不对的
IDE 的优势,步进执行,因此无法使用
再说到版本问题好了,我的 java 环境可能装了 API 17,
但我的手机上的 OS 是 API 19;就不同版本啊
那它骨子里到底是怎麽做的?
也许只有 API 窗口是对的,用上了类似 win os 里 DLL 的技术
(没法子,我就是对 win os 比较熟,所以我用 DLL 来形容它)
DLL 是执行时期才去找寻 function 位置的,靠的是序号,或者 function name(字串)
老实说我觉得和 reflect 很像
因此 IDE 无法准确的跳行数,可能就这个问题
(其实 win os 下写 vc, 在 dll 上也可能跳不准;如果版本不同的话
我想原因都类似的)
所以 source code 其实是让我从完全无法下手,变成多少可以猜一点而已 XD
有很多东西仍然是未知的 XDDDD
※ 编辑: HuangJC (114.136.55.123), 05/14/2016 00:14:38
9F:→ ssccg: 把targetSDK设成跟装置一样,就会用那版的source 05/14 13:38
10F:→ HuangJC: 那行数就会准?!有机会试试,谢谢 05/14 15:42
11F:→ ssccg: 之前有遇过看source找不到原因的错误,结果是新版已修的bug 05/14 22:13