alibaba / weex

A framework for building Mobile cross-platform UI
https://weexapp.com/
Apache License 2.0
18.28k stars 2.13k forks source link

picker在安卓和ios上表现不一致 #2033

Closed vacant697 closed 3 years ago

vacant697 commented 7 years ago

看到更新中说支持picker了很开心。。可开心不到两秒,发现安卓和ios的ui表现差别巨大。。。怎么用!!

funnyN7 commented 7 years ago

本来就是各平台原生控件的调用

alext1981 commented 7 years ago

在开发picker的时候,我们就有很多的讨论(甚至是争论),是做是三端UI完全一致还是体现各自的特色,最后我们决定采用现在的方式,也就是平台原生的方式,原因有以下几点:

  1. picker是弹出式的,类似于对话框,不在页面布局范围内;
  2. 在iOS和Android平台上,大家都已经适应了原生的交互方式,比如date picker在iOS上的转轮效果和Anroid上的全屏日历,这些交互方式是不相容的,如果强行设计成一致的UI,反而成了反用户习惯的行为,这和weex希望达到的原生UI体验是不符的; 基于以上两点,我们认为在picker这个功能上,我们倾向于是确保三端致的功能,而不是三端一致的UI,原生的交互体验可能更好。
    当然我们也非常欢迎开发者来提供自己的实现,Weex即将推出插件市场,届时开发者完全可以写一个自己的实现的picker并发布到市场,我们期待能出现比官方实现更优秀的组件。
XuDouWei commented 7 years ago

picker.pick 里面嵌套picker.pick,被嵌套的picker再ios端不能弹出。@alext1981

tianyouhui commented 7 years ago

pick在iOS上正常,在安卓上崩溃,请问是什么原因啊?

                                                                       java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
                                                                           at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java:236)
                                                                           at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java:235)
                                                                           at android.os.Handler.handleCallback(Handler.java:739)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:171)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5620)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
                                                                        Caused by: java.lang.reflect.InvocationTargetException
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.taobao.weex.bridge.MethodInvoker.invoke(MethodInvoker.java:232)
                                                                           at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java:234)
                                                                           at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java:235) 
                                                                           at android.os.Handler.handleCallback(Handler.java:739) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                           at android.os.Looper.loop(Looper.java:171) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5620) 
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) 
                                                                        Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                           at android.content.res.Resources.getValue(Resources.java:1373)
                                                                           at android.content.res.NubiaResources.getValue(NubiaResources.java:189)
                                                                           at android.content.res.Resources.loadXmlResourceParser(Resources.java:2895)
                                                                           at android.content.res.Resources.getLayout(Resources.java:1187)
                                                                           at android.view.LayoutInflater.inflate(LayoutInflater.java:421)
                                                                           at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                                           at android.support.v7.app.AlertController$AlertParams.createListView(AlertController.java:966)
                                                                           at android.support.v7.app.AlertController$AlertParams.apply(AlertController.java:942)
                                                                           at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:930)
                                                                           at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:954)
                                                                           at com.taobao.weex.appfram.pickers.WXPickersModule.performSinglePick(WXPickersModule.java:364)
                                                                           at com.taobao.weex.appfram.pickers.WXPickersModule.pick(WXPickersModule.java:247)
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at com.taobao.weex.bridge.MethodInvoker.invoke(MethodInvoker.java:232) 
                                                                           at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java:234) 
                                                                           at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java:235) 
                                                                           at android.os.Handler.handleCallback(Handler.java:739) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                           at android.os.Looper.loop(Looper.java:171) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5620) 
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) 
tianyouhui commented 7 years ago

我找了两天,才发现问题,给其他遇到这个问题的人提醒一下,weex使用的是v7的appcompat那一套,直接使用默认的activity是不行的,会崩溃。哎

sunzhongwei commented 7 years ago

这个问题无语了,官方就没遇到的么

sunzhongwei commented 7 years ago
07-05 16:32:45.814 18406-18459/com.zljy.patient D/weex: callJS >>>> instanceId:1function:callJS tasks:[{"data":"1","type":2},{"data":"[{\"args\":[\"98\",\"click\",{\"position\":{\"height\":96.875,\"width\":280.20834,\"x\":234.375,\"y\":666.6667}},null],\"method\":\"fireEvent\"}]","type":3}]
07-05 16:32:45.824 18406-18459/com.zljy.patient D/weex: [WXBridgeManager] callNativeModule >>>> instanceId:1, module:picker, method:pick, arguments:[{"index":0,"items":["Saab","Volvo","BMW"]},"41"]
07-05 16:32:45.834 18406-18406/com.zljy.patient W/ResourceType: No package identifier when getting value for resource number 0x00000000
07-05 16:32:45.834 18406-18406/com.zljy.patient W/System.err: android.content.res.Resources$NotFoundException: Resource ID #0x0
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.content.res.Resources.getValue(Resources.java:1147)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2350)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.content.res.Resources.getLayout(Resources.java:963)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.view.LayoutInflater.inflate(LayoutInflater.java:395)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.support.v7.app.AlertController$AlertParams.createListView(AlertController.java:877)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.support.v7.app.AlertController$AlertParams.apply(AlertController.java:854)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:883)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.taobao.weex.appfram.pickers.WXPickersModule.performSinglePick(WXPickersModule.java:229)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.taobao.weex.appfram.pickers.WXPickersModule.pick(WXPickersModule.java:85)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at java.lang.reflect.Method.invoke(Method.java:525)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.taobao.weex.bridge.MethodInvoker.invoke(MethodInvoker.java:46)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.taobao.weex.bridge.NativeInvokeHelper$1.run(NativeInvokeHelper.java:48)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java:49)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.os.Handler.handleCallback(Handler.java:730)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:92)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.os.Looper.loop(Looper.java:137)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5473)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at java.lang.reflect.Method.invoke(Method.java:525)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691)
07-05 16:32:45.844 18406-18406/com.zljy.patient W/System.err:     at dalvik.system.NativeStart.main(Native Method)
ArvinQi commented 7 years ago

https://segmentfault.com/q/1010000009132515第一个回答,我的好了

misakuo commented 7 years ago

picker底层使用了support v7里的AlertDialog来构建,其中包含一些系统内置资源的调用,请检查一下是否正确引入了support和appcompat库,以及activity是否使用了正确的theme

sunzhongwei commented 7 years ago

@ArvinQi 哈哈,那个回答是我写的。。。

Bob-huang-gdut commented 6 years ago

请问如何解决Android上的全屏日历过长,而导致得划一段距离才能滚动到对应年份?

YorkShen commented 5 years ago

This PR/issue doesn't receive response since Weex migrated to Apache two years ago and this repository is no longer active yet.

Feel free to ask question in new repository and thanks for your contribution.

Hanks10100 commented 3 years ago

This issue is outdated for a long time and will be closed now. You can create a new one if you still have questions.