gpt4 book ai didi

kotlin - 将带有操作栏/工具栏和 float 操作按钮的 MainActivity 转换为 Anko

转载 作者:行者123 更新时间:2023-12-01 08:53:28 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 Kotlin/Anko。

我已经浏览了示例 here并且还克隆了模板项目,并且可以理解如何做一些基本的事情,但作为练习,我想将这个简单的事件(从 Android Studio 中的空白事件生成并转换为 Kotlin)也可以使用 Anko。关于 Anko 的例子不多,大部分只是上面引用的 github 页面上的内容的副本。

有人可以演示如何将以下内容转换为 Anko DSL 吗?

MainActivity.kt

import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.Menu
import android.view.MenuItem


class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolBar = findViewById(R.id.toolbar) as Toolbar
setSupportActionBar(toolBar)
val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener { view -> Snackbar.make(view, "Replace this with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show() }
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == R.id.action_settings) {
println("settings clicked on ")
return true
}
return super.onOptionsItemSelected(item)
}
}

main_activity.xml

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_main" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.gmail.npnster.mykotlinfirstproject.MainActivity"
tools:showIn="@layout/activity_main">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/hello"
/>
</RelativeLayout>

menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.gmail.npnster.mykotlinfirstproject.MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>

最佳答案

您可以使用 ankoView创建方法View s 在 DSL 上下文中没有 DSL 方法。

例如,创建一个 NavigationView可以使用

ankoView({ NavigationView(it) }) {
lparams(width = wrapContent, height = matchParent, gravity = Gravity.START)
// more initialization follows
}

这样你可以实例化 FloatingActionButtonAppBarLayout ,只需在 ankoView 中调用它们的构造函数的第一个参数函数。为了您的方便,您可以自己制作类似 DSL 的函数,如 the manual :

fun floatingActionButton(init: FloatingActionButton.() -> Unit) = ankoView({ FloatingActionButton(it) }, init)

创建 Toolbar更简单:有一个 DSL toolbar org.jetbrains.anko.appcompat.v7 中的方法.


当使用 Anko DSL 时,要包含另一个布局,就像您对 content_main 所做的那样, 可以使用 Anko include 函数或只写一个函数来填充 ViewGroup .你可以使用这个模板:

fun ViewGroup.myLayout() {
textView("123")
// more DSL code here
}

然后调用myLayout()里面一些ViewGroup初始化器。

关于kotlin - 将带有操作栏/工具栏和 float 操作按钮的 MainActivity 转换为 Anko,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com