美文网首页
Anko实际使用中的一些坑

Anko实际使用中的一些坑

作者: 747a945a4501 | 来源:发表于2016-08-19 14:28 被阅读417次

    前言


    有点标题党了,但有一些坑其实也不是Anko本身的坑,Anko写布局其实就是用代码写布局,和以前的xml还是有一些区别的。
    今天来说说这些坑( ps:今天只是讲用法,至于为什么各位自己Ctrl+鼠标左键点进去看源码 )


    1. 相对布局的约束需指名id
    relativeLayout {
        val topView = textView {
    
        }.lparams( MATCH_PARENT , dip(30f) )
    
        textView {
    
        }.lparams(MATCH_PARENT, MATCH_PARENT) { below(topView) }
    }
    

    从上面可以看看 下面的TextView在 topView下面,但是实际运行起来确不是这样。 难道是below()没用?
    当然不是!!你需要给topView加个id,这样才行。

    val topView = textView {
          id = 0x12345
     }.lparams( MATCH_PARENT , dip(30f) )
    
    1. activity里面 new 控件或者布局,用anko写一定报错
      有人说我想用anko 额外的写个LinearLayout的,下面这样写行不行
      fun aaa() {
         ....
         val view = linearLayout {
             textView {}.lparams{}
             button {}.lparams{}
         }
         ....
      

    }
    ```
    运行起来就报错,什么原因,写的都是正确的啊。
    前面原理的文章讲过了,你这个方法调用的是 Activity.linearLayout()。它会根据 上下文的对象,activity会setContextView(). 所以咱们得用Context的扩展方法

    下面2中解决方法

    val view = getContext().linearLayout { }
    
    val view = UI { linearLayout { } }.view
    
    1. 用recycleView或者ListView,在adapter写每个item的布局时候,最外层的布局需指名LayoutParameter,看下面说明:
     //在Activity,不要指名relativeLayout的LayoutParameter,它就是充满
      onCreate(b:Builder) {
          relativeLayout {
        
          }
      }
    
    //在Adapter中
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): AHolder {
      val rootView = kApplication.UI {
          linearLayout {
             //如果不指名最外层的linearLayout的LayoutParameter,默认的是item宽高度包裹内容
              layoutParams = viewGroupLP(MATCH_PARENT, WRAP_CONTENT)
          }
      }
     。。。
    return AHolder(rootView)
    }
    
    1. 用ViewPage的时候需设置id,不然会报如下错误:
      看下面说明:
     //在Activity,不要指名relativeLayout的LayoutParameter,它就是充满
      onCreate(b:Builder) {
          relativeLayout {
        
          }
      }
    
    //在Adapter中
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): AHolder {
      val rootView = kApplication.UI {
          linearLayout {
             //如果不指名最外层的linearLayout的LayoutParameter,默认的是item宽高度包裹内容
              layoutParams = viewGroupLP(MATCH_PARENT, WRAP_CONTENT)
          }
      }
     。。。
    return AHolder(rootView)
    }
    

    还有几个后续更新,今天写的太累了。。。

    相关文章

      网友评论

          本文标题:Anko实际使用中的一些坑

          本文链接:https://www.haomeiwen.com/subject/rzebsttx.html