澳门蒲京devexpress wpf lookup用法。使用anko 抛弃XML

普通文本只需使用controltemplate里的东西,使用他就可以不用写布局xml代码了

<dxg:GridColumn.EditSettings >
     <dxg:LookUpEditSettings  x:Name="lookUp" IsTextEditable="False" DisplayMember="ProductName" ValueMember="ProductName" AutoPopulateColumns="False" >
          <dxg:LookUpEditSettings.PopupContentTemplate>
                    <ControlTemplate>
                        <dxg:GridControl x:Name="PART_GridControl">
                            <dxg:GridControl.Columns>
                                <dxg:GridColumn FieldName="ProductName_QuantityPerUnit" UnboundType="String"
                                                UnboundExpression="[ProductName]+' '+[QuantityPerUnit]"/>
                                <!--<dxg:GridColumn FieldName="ProductName"/>
                                <dxg:GridColumn FieldName="QuantityPerUnit"/>-->
                            </dxg:GridControl.Columns>
                            <dxg:GridControl.View>
                                <dxg:TableView AutoWidth="True" />
                            </dxg:GridControl.View>
                        </dxg:GridControl>
                    </ControlTemplate>
                </dxg:LookUpEditSettings.PopupContentTemplate>
                <dxg:LookUpEditSettings.StyleSettings>
                    <dxg:SearchLookUpEditStyleSettings />
           </dxg:LookUpEditSettings.StyleSettings>
      </dxg:LookUpEditSettings>
</dxg:GridColumn.EditSettings>

anko

anko
是平慢性做kotlin语言抛弃布局xml的工具,使用外就是可以不用写布局xml代码了

  这是grid表格里使用lookup,普通文书只需要采用controltemplate里之物

举个栗子

设若我们要贯彻一个效能 点击按钮toast弹出输入框输入的字符(如下效果图)

澳门蒲京 1

效果图

普通方式实现这样一个力量,可能咱们会这么做

  • 创建布局xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.github.jokar.ankotest.MainActivity">

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="showEdit"
        android:onClick="showEdit"/>
</LinearLayout>
  • 当activity里初始化输入框和 写点击事件

class MainActivity : AppCompatActivity() {
    var edit: EditText? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        edit = findViewById(R.id.edit) as EditText
    }


    fun showEdit(v: View) {
        var string = edit?.text.toString()
        Toast.makeText(applicationContext, string, Toast.LENGTH_SHORT).show()
    }
}
可要我们采取anko就差了,我们不欲XML文件了,然后修改activity如下
class MainActivity : AppCompatActivity() {
    var edit: EditText? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        createView()
    }


    fun showEdit() {
        var string = edit?.text.toString()
        Toast.makeText(applicationContext, string, Toast.LENGTH_SHORT).show()
    }

    fun createView() {
        linearLayout {
            lparams(width = matchParent, height = matchParent)
            orientation = LinearLayout.VERTICAL

            edit = editText {
                textSize = 15f
            }.lparams(width = matchParent, height = wrapContent)

            button {
                text = "ShowText"
                textSize = 15f
                onClick {
                    showEdit()
                }
            }.lparams(width = matchParent, height = wrapContent) {
                topMargin = dip(10)
            }
        }
    }
}

马上就是anko的中坚用法了,跟写xml布局尚未多老分别;但于其实运用过程中会发现要非是重复activity接近里想一直使用anko控件是蛮的;;下面介绍开发中相见的主干气象

在fragment里使用anko

当fragment里应用要比较轻之;只需要在最好外层加上UI {}.view不畏可以下了;样例如下:

class Fragment1 : Fragment() {

    var swipeRefreshLayout: SwipeRefreshLayout? = null
    var recyclerView: RecyclerView? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return super.onCreateView(inflater, container, savedInstanceState)
    }

    /**
     * createView
     */
    fun createView(): View {
        return UI {
            linearLayout {
                //swipeRefreshLayout
                swipeRefreshLayout = swipeRefreshLayout {
                    setColorSchemeResources(android.R.color.holo_blue_bright)
                    setOnRefreshListener {
                        getData()
                    }
                    //recyclerView
                    recyclerView = recyclerView {
                        layoutManager = LinearLayoutManager(context)
                        backgroundColor = Color.parseColor("#f3f3f3")
                    }
                }.lparams(width = matchParent, height = matchParent)

            }
        }.view
    }

    fun getData() {

    }
}

这么虽行了,使用好简单


在Adapter里使用

这边介绍如何当非activity,fragment里用anko,也十分粗略以及了with字符,例如这样:

 fun createItemView(context: Context): View {
        return with(context) {
            linearLayout {
                lparams(width = matchParent, height = wrapContent)
                cardView {
                    linearLayout {
                        id = R.id.percentFrameLayout
                        backgroundResource = selectableItemBackground(context)
                        lparams(width = matchParent, height = dip(80))
                        orientation = LinearLayout.VERTICAL

                        textView {
                            id = R.id.text
                            gravity = Gravity.LEFT
                            textSize = 17f
                            textColor = Color.BLACK
                        }.lparams(width = matchParent, height = matchParent) {
                            setPadding(dip(10), dip(10), dip(10), dip(10))
                        }
                    }
                }.lparams(width = matchParent, height = wrapContent) {
                    margin = dip(5)
                }
            }
        }
    }

    fun selectableItemBackground(context: Context): Int {
        var outValue = TypedValue()
        context.theme.resolveAttribute(android.R.attr.selectableItemBackground, outValue, true)
        return outValue.resourceId
    }
  • 瞩目这里给控件设置了id,所以你待在res/value文件夹下创办一个名叫也ids.xml文件,然后上加而所用之id

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="percentFrameLayout" type="id"/>
    <item name="text" type="id"/>
</resources>

接下来于adapter里使用就是如此:

 override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
        return ViewHolder(createItemView(context))
    }

 inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var tvTitle = itemView.findViewById(R.id.text) as TextView
    }

援xml布局文件

当然anko也非是那死板的工具,他吧足以引用xml布局文件充分简单;使用include字符就尽

include<View>(R.layout.common_toolbar)

尽管像这么即便可以了

高档用法 – 如何利用于定义view

每当实质上开支中anko给咱提供的控件肯定是勿可知满足我们的急需的,那我们怎么把团结之自定义控件使用及anko中呢,其实十分粗略

  • 第一创建一个Views.kt文件
  • 在拖欠公文被补充加下面代码

inline fun ViewManager.customizeView(theme: Int = 0) = customizeView(theme) {}

inline fun ViewManager.customizeView(theme: Int = 0, init: CustomizeView.() -> Unit) = ankoView({ CustomizeView(it) }, theme, init)

      *  这里的```CustomizeView```是你的自定义View
      *  这里的```customizeView```是你用在anko里的名称,一般就是自定义view的名称,首字母小写这样的写法
  • 然后便得于anko里这样用了customizeView{}

anko的骨干使用就到马上了,后续要碰到其他题目会见补充及之;若
想看anko具体在类型里使用;得省我此项目,一个下
kotlin编写的知乎日报
;;若觉得对您有因此欢迎点赞和star