使用Kotlin&Anko, 扔掉XML开发Android应用

  • 时间:
  • 浏览:5
  • 来源:彩神大发11选5_神彩大发11选5官方

每一另一有一个tab的内容展示用fragment所以这里了。准确的说是fragment的container。

你所以container是一另一有一个framelayout。在action bar之下,在tab bar之上。在布局的后来有below(ID_TOP_BAR), above(ID_BOTTOM_TAB_BAR)ID_TOP_BARID_BOTTOM_TAB_BAR就分别是action bar和tab bar的id值。那此id值自由设定。

全文能够非要在这里画上一另一有一个句点了。以上还有所以关于Anko这么使用的地方。Anko也是能非要实现代码界面分离的。继承AnkoComponent能非要写出独立的布局文件,所以能非要用anko preview插件来预览界面效果。就拿setting你所以tab的fragment来举例:

首先定义一另一有一个独立的布局文件:

来一另一有一个列子看一下。为了不太墨迹,所以不多要的xml声明此处略去。

Jetbrains给Android带来的不仅是Kotlin,还有Anko。从Anko的官方说明来看这是一另一有一个雄心勃勃的要代替XML写Layout的新的开发土最好的办法。Anko最重要的所以是引入了DSL(Domain Specific Language)的土最好的办法开发Android界面布局。当然,本质是代码实现布局。不过使用Anko详细不想经历Java纯代码写Android的痛苦。所以并有的是是来自Kotlin的,所以自然的使用你所以土最好的办法开发就具有了:

调用targetFragmentonActivityResult()土最好的办法来回传日期数据。

首先自定义一另一有一个view:WeightTextView

日记的内容包括,日记title,日记并有的是的内容还有日记的日期。

你所后来来你所以托管activity的界面布局所以一另一有一个详细的白板了。你所以白板现在要分为上中下三每项。上部为亲戚亲戚朋友 自定义的action bar,最下面的是tab bar,剩下的每项所以每个tab的内容的fragment。

在positive按钮点击后来执行土最好的办法sendResult回传数据

DetailFragment中通过override土最好的办法onActivityResult()来接收数据。

这每项涉及到的语法内容能非要参考官网。

这里简单介绍一下。拿官网的例子说一下:

为了帮助理解,这里给出一另一有一个参数是土最好的办法的土最好的办法:

首先DatePickerFragment要继承DialogFragment后来override土最好的办法onCreateDialog(savedInstanceState: Bundle)。在你所以土最好的办法里使用后面 代码创建一另一有一个饱含日期选则器的dialog。

这里前要注意gravity = Gravity.CENTER_HORIZONTAL or Gravity.CENTER_VERTICAL

能非要直接写成gravity = Gravity.CENTER。这里是为了突出or的用法。Kotlin里的or

所以java的|操作符的作用。

分别解释:

选则日期的dialog fragment是DatePickerFragment

第一另一有一个是用lambda表达式作为传入土最好的办法,第有一个是所以定义好的一另一有一个土最好的办法作为传入土最好的办法。

上文第4点用到了weightTextView。这是一另一有一个自定义的view。在Anko布局中,能非要根据当事人的前要自定义各种各样的view。所以,前要经过一另一有一个小小的除理以可不能能够非要使用到Anko的布局中。你所以小小的除理就叫做扩展。下面看看要怎样给Anko再加weightTextView扩展的。

每一另一有一个tab项被点击的后来的除理:

下面要开发的是一另一有一个日记App。一共有另一有一个tab,第一另一有一个是日记列表,第有一个tab是写日记,第另一有一个tab能非要设置所以字体大小等(这里只用来占位,不做实现)。

真是灰常的简单呢。在土最好的办法html()里,参数是一另一有一个HTML类的扩展土最好的办法,所以此土最好的办法无参,返回Unit(java的void)。

首先,安装一另一有一个Kotlin的插件是前要的。有了你所以插件能够非要使用Kotlin,所以能够非要使用Anko。安装你所以插件和Android Studio里安装别的插件市一样的。只前要使用Kotlin查找就能非要找到,后来安装即可。

为了保证兼容,这里使用Support v4来除理Fragment的显示等操作。在activity的一后来开始就把前要的fragemnt都加载进来。

Activity上使用就简单所以了,只前要这么一句SettingsUI<TempActivity>().setContentView(this)

现在就创建你所以listview,并在listview的item点击后来调转到相应的activity去。

你所以listview非常简单,只在一另一有一个竖直的布局中放置,所以淬硬层 和淬硬层 有的是填满竖直

布局。

欢迎加群互相学习,一起进步。QQ群:iOS: 55099570 | Android: 350987132 | Go:217696290 | Python:336850185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/550505.html

尝鲜使用Kotlin写了一段时间Android。说大幅度的减少了Java代码所以不夸张。用Java的后来动不动就new一另一有一个OnClickListener()匿名类,动不动就类型转换的地方都能非要省下所以。更不多特殊的地方使用data class更是少些我想知道几次代码。

前要注意打星号的地方。按钮在点击后来会弹出一另一有一个dialog fragment来显示日期view。用户能非要在你所以日期view里选则相应的日期。所以,要怎样从日期dialog fragment传递选则的日期给DetailFragment呢?这里就涉及到另一有一个fragment之间传递数据的问题。

在这么一另一有一个lambda表达式里就能非要直接所以调用HTML类的土最好的办法了,后面 的过程是缘何样的呢

所以你所以布局还能非要用在亲戚亲戚朋友 后来创建的TempActivity上:

在选则日期的后来,会触发DatePickerOnDateChangedListener接口的onDateChanged土最好的办法。亲戚亲戚朋友 在你所以土最好的办法里记录选则好的日期数据,在dialog的positive按钮点击后来把你所以数据发送给DetailFragment

首先创建一另一有一个ListView的item点击后来跳转的activity。这里叫做TabDemo1

本文中的重点在于使用Anko做布局,具体的逻辑除理java写和Kotlin写这么那此区别。这里只简单介绍一下。

现在就从你所以托管activity:TabDemo1后来开始。这里亲戚亲戚朋友 不使用默认的ActionBar,所以用详细自定义的土最好的办法来写一另一有一个亲戚亲戚朋友 当事人的action bar。所以前要把界面设定为全屏模式。设置全屏的模式的土最好的办法有所以,亲戚亲戚朋友 用设置style的土最好的办法来实现。

热身后来开始。亲戚亲戚朋友 来后来开始真正的开发阶段。

把你所以布局文件用在DiarySettingsFragment上:

下面看看要怎样扩展Anko,来使用亲戚亲戚朋友 后面 的自定义view。

代码在这里。除了布局Anko还有所以的所以语法糖糖也很是不错,不过这里就不多说了。有更多想了解的,请移步官网。

每一另一有一个tab都用一另一有一个Fragment来展示内容。这另一有一个tab分别HomeListFragmentDetailFragment,DiarySettingsFragment。你所以另一有一个fragment有的是一另一有一个叫做TabDemo1的托管Activity里。

所以布局上就包括日记的title、内容输入用的EditText以及为了说明用的text view,还有edit text里的hint。最后还有一另一有一个选则

日期的控件。

这里是自定义action bar。使用换一另一有一个linearLayout。如前所述,要横向布局linear layout

就前要单独的指定orientation:orientation =LinearLayout.HORIZONTAL。这里比较简单,非要一另一有一个显示title的text view。

HomeListFragment类作为第一另一有一个tab内容展示fragment,用来显示详细的日记列表的布局就非常简单了,和亲戚亲戚朋友 前面的例子这么那此不多的差别。所以在一另一有一个verticalLayout里放一另一有一个list view。你所以list view的data source只前要一另一有一个列表。

亲戚亲戚朋友 来看一下你所以布局应该缘何写:

所以sync一把。配置的问题除理。

另外,在java写的后来常用的findViewById()土最好的办法在Kotlin和Anko中能非要改为的find<FrameLayout>(ID_FRAMELAYOUT)。不见得简单,所以增加了类型安全。不想再强制类型转换。所以用担心相关的错误再地处。

日期数据传输这每项到这里后来开始。

在后来开始后来前要考虑一另一有一个很严重的事情:数据地处那此地方。所以应该是SQLite所以地处云上的。地处云裳就能非要实现同一另一有一个账号登录在任何地方都能非要同步到同样的内容。这里只简单模拟,存装进app的内存里。存装进Application派生类AnkoApplication

静态属性diaryDataSource里。diaryDataSource是一另一有一个ArrayList一样的列表。

这么缘何发送呢?使用target fargment土最好的办法。在detail fragment弹出dialog fragment的后来,把detail fragment设置为target fragment。

build.gradle里再加下面的代码:

现在有这么一另一有一个HTML类,这么调用的以能非要非要所以:

后来把你所以style应用在activity在AndroidManifest.xml配置中。

在土最好的办法执行的过程中,首先初始化了HTML。后来调用了你所以作为参数传入的扩展土最好的办法。在具体调用html()土最好的办法的后来,能非要只简单写一另一有一个lambda表达式作为传入的HTML扩展土最好的办法。既然是一另一有一个类的扩展土最好的办法,那当然能非要调用你所以类内部的土最好的办法了。

在标星下面的一行代码中。datePicker.setTargetFragment(this@DetailFragment,DetailFragment.REQUEST_DATE)DetailFragment设定为target fragment,所以指定REQUEST_DATE这code,为后来取出数据使用。

附加解释:

土最好的办法setSelected()是被迫再加的。在使用Anko,大概使用代码开发Android布局的后来selector不起作用。只好把点击后的高亮效果写在自定义的text view里。