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

  • 时间:
  • 浏览:0
  • 来源:彩神大发快3_神彩大发快3官方

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

并能 注意打星号的地方。按钮在点击以都会弹出四个 多dialog fragment来显示日期view。用户可不并能 在你什儿 日期view里选泽相应的日期。否则,怎样才能从日期dialog fragment传递选泽的日期给DetailFragment呢?这里就涉及到四个 多fragment之间传递数据的现象。

首先自定义四个 多view:WeightTextView

build.gradle里打上去下面的代码:

附加解释:

法子setSelected()是被迫打上去的。在使用Anko,离米 使用代码开发Android布局的然后selector不起作用。只好把点击后的高亮效果写在自定义的text view里。

现在就从你什儿 托管activity:TabDemo1开始。这里一些人不使用默认的ActionBar,要是用完全自定义的法子来写四个 多一些人买车人的action bar。统统并能 把界面设定为全屏模式。设置全屏的模式的法子有统统,一些人用设置style的法子来实现。

为了保证兼容,这里使用Support v4来防止Fragment的显示等操作。在activity的一开始就把并能 的fragemnt都加载进来。

Activity上使用就简单统统了,只并能 那么一句SettingsUI<TempActivity>().setContentView(this)

在选泽日期的然后,会触发DatePickerOnDateChangedListener接口的onDateChanged法子。一些人在你什儿 法子里记录选泽好的日期数据,在dialog的positive按钮点击然后把你什儿 数据发送给DetailFragment

在开始然后并能 考虑四个 多很严重的事情:数据居于什么地方。原本应该是SQLite肯能居于云上的。居于云裳就可不并能 实现同四个 多账号登录在任何地方都可不并能 同步到同样的内容。这里只简单模拟,存装进app的内存里。存装进Application派生类AnkoApplication

静态属性diaryDataSource里。diaryDataSource是四个 多ArrayList一样的列表。

第四个 多是用lambda表达式作为传入法子,第3个是肯能定义好的四个 多法子作为传入法子。

我我虽然灰常的简单呢。在法子html()里,参数是四个 多HTML类的扩展法子,否则此法子无参,返回Unit(java的void)。

选泽日期的dialog fragment是DatePickerFragment

分别解释:

为了帮助理解,这里给出四个 多参数是法子的法子:

尝鲜使用Kotlin写了一段时间Android。说大幅度的减少了Java代码一些不夸张。用Java的然后动不动就new四个 多OnClickListener()匿名类,动不动就类型转换的地方都可不并能 省下统统。更那么多再说特殊的地方使用data class更是少些真不知道2个代码。

上文第4点用到了weightTextView。这是四个 多自定义的view。在Anko布局中,可不并能 根据买车人的并能 自定义各种各样的view。否则,并能 经过四个 多小小的防止然后才可不并能 使用到Anko的布局中。你什儿 小小的防止就叫做扩展。下面看看怎样才能给Anko打上去weightTextView扩展的。

否则sync一把。配置的现象防止。

来四个 多列子看一下。为了不太墨迹,一些那么多再说要的xml声明此处略去。

下面看看怎样才能扩展Anko,来使用一些人上面的自定义view。

在法子执行的过程中,首先初始化了HTML。然后调用了你什儿 作为参数传入的扩展法子。在具体调用html()法子的然后,可不并能 只简单写四个 多lambda表达式作为传入的HTML扩展法子。既然是四个 多类的扩展法子,那当然可不并能 调用你什儿 类內部的法子了。

在那么四个 多lambda表达式里就可不并能 直接原本调用HTML类的法子了,上面的过程是为社 样的呢

首先创建四个 多ListView的item点击然后跳转的activity。这里叫做TabDemo1

把你什儿 布局文件用在DiarySettingsFragment上:

你什儿 然后你什儿 托管activity的界面布局要是四个 多完全的白板了。你什儿 白板现在要分为上中下三每项。上部为一些人自定义的action bar,最下面的是tab bar,剩下的每项要是每个tab的内容的fragment。

那么为社 发送呢?使用target fargment法子。在detail fragment弹出dialog fragment的然后,把detail fragment设置为target fragment。

这里并能 注意gravity = Gravity.CENTER_HORIZONTAL or Gravity.CENTER_VERTICAL

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

要是java的|操作符的作用。

每四个 多tab都用四个 多Fragment来展示内容。这四个 多tab分别HomeListFragmentDetailFragment,DiarySettingsFragment。你什儿 四个 多fragment都会四个 多叫做TabDemo1的托管Activity里。

这每项涉及到的语法内容可不并能 参考官网。

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

每四个 多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值自由设定。

否则你什儿 布局还可不并能 用在一些人然后创建的TempActivity上:

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

在positive按钮点击然后执行法子sendResult回传数据

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

DetailFragment中通过override法子onActivityResult()来接收数据。

另外,在java写的然后常用的findViewById()法子在Kotlin和Anko中可不并能 改为的find<FrameLayout>(ID_FRAMELAYOUT)。不见得简单,否则增加了类型安全。那么多再再强制类型转换。要是用担心相关的错误再居于。

调用targetFragmentonActivityResult()法子来回传日期数据。

然后把你什儿 style应用在activity在AndroidManifest.xml配置中。

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

就并能 单独的指定orientation:orientation =LinearLayout.HORIZONTAL。这里比较简单,必须四个 多显示title的text view。

每四个 多tab项被点击的然后的防止:

热身开始。一些人来开始真正的开发阶段。

现在就创建你什儿 listview,并在listview的item点击然后调转到相应的activity去。

你什儿 listview非常简单,只在四个 多竖直的布局放进去置,否则层厚和层厚都会填满竖直

布局。

日记的内容包括,日记title,日记三种生活的内容还有日记的日期。

HomeListFragment类作为第四个 多tab内容展示fragment,用来显示完全的日记列表的布局就非常简单了,和一些人前面的例子那么什么那么多的差别。要是在四个 多verticalLayout里放四个 多list view。你什儿 list view的data source只并能 四个 多列表。

全文也可不并能 在这里画上四个 多句点了。以上还有统统关于Anko那么使用的地方。Anko也是可不并能 实现代码界面分离的。继承AnkoComponent可不并能 写出独立的布局文件,否则可不并能 用anko preview插件来预览界面效果。就拿setting你什儿 tab的fragment来举例:

首先定义四个 多独立的布局文件:

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

日期的控件。

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

首先,安装四个 多Kotlin的插件是并能 的。有了你什儿 插件才可不并能 使用Kotlin,否则才可不并能 使用Anko。安装你什儿 插件和Android Studio里安装别的插件市一样的。只并能 使用Kotlin查找就可不并能 找到,然后安装即可。

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

一些人来看一下你什儿 布局应该为社 写:

现在有那么四个 多HTML类,那么调用的然后可不并能 原本:

Jetbrains给Android带来的不仅是Kotlin,还有Anko。从Anko的官方说明来看这是四个 多雄心勃勃的要代替XML写Layout的新的开发法子。Anko最重要的一些是引入了DSL(Domain Specific Language)的法子开发Android界面布局。当然,本质是代码实现布局。不过使用Anko完全那么多再经历Java纯代码写Android的痛苦。肯能三种生活是来自Kotlin的,统统自然的使用你什儿 法子开发就具有了:

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

首先DatePickerFragment要继承DialogFragment然后override法子onCreateDialog(savedInstanceState: Bundle)。在你什儿 法子里使用上面代码创建四个 多中有 日期选泽器的dialog。