使用 kotlin 语言在 android 工作室中向 activity 添加和管理 two/multiple 布局

Add and manage two/multiple layouts to an activity in android studio using kotlin language

我要使用 Kotlin 语言构建一个 android 应用程序,据我所知,我需要在单个主 activity 中使用两个布局。我必须创建的 UI 如下所示。

接下来的正文如"Vocabulary"、"Comprehension and narration",我称之为题目。 下面的其他内容是子主题及其计数。此外,该主题与副主题有不同的形象。为了简单起见,假设我有两张图片,一张用于副主题(bulb_on),一张用于主题(pink_band)。

最初我创建了一个布局来实现相同的目的。但是,我实现的是主题和子主题的相同视图,其中在没有其他默认值的情况下被填充。所以为了克服这个问题。我删除了主题和子主题的不必要字段的可见性。但是我又遇到了 space 的问题。所以,我尝试的下一个解决方案是两种不同的布局。

为了实现 UI,我为主题创建了一个布局,为子主题创建了另一个布局。现在这个问题我不知道如何从这里开始,因为我是 kotlin 和 android-studio 的业余爱好者。这就是为什么我问我是否需要添加额外的方法来管理 calling/using 这两个活动?

感谢任何帮助。

据我了解,您可以使用 ScrollView 来处理 space 或嵌套 ScrollView

的问题

或者如果我没有理解你可以:

您可以制作两个布局并用于将两者包含在一个 xml 文件中并在 activity 中使用此文件,或者您可以使用 2 个片段在 [=16] 的布局中添加 2 个框架布局=] 然后在 activity

中打开两个片段

这个解决方案对我有用。

主题和副主题使用两种不同的布局。

题目布局:

<?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="wrap_content"
tools:context=".MainActivity">


<TextView
    android:id="@+id/txtName"
    android:layout_width="265dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="65dp"
    android:layout_marginStart="65dp"
    android:layout_marginTop="42dp"
    android:textColor="#d983c0"
    android:textSize="18sp"
    tools:text="Vocabulary" />

<ImageView
    android:id="@+id/imageSymbol"
    android:layout_width="32dp"
    android:layout_height="48dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="26dp"
    app:srcCompat="@drawable/pink" />

 </RelativeLayout>

子主题布局:

<?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="wrap_content">

<TextView
    android:id="@+id/textView_subtopic_title"
    android:textColor="#200"
    android:layout_width="220dp"
    android:layout_height="25dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="42dp"
    android:gravity="center"
    android:text="Subtopic Title" />

<TextView
    android:id="@+id/textView_count"
    android:layout_width="68dp"
    android:gravity="center"
    android:textColor="#200"
    android:layout_height="20dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="75dp"
    android:text="count" />

<ProgressBar
    android:id="@+id/progressBar2"
    style="?android:attr/progressBarStyleHorizontal"
    android:progressDrawable="@drawable/customprogressbar"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="105dp" />

<ImageView
    android:id="@+id/imageView_bulb"
    android:layout_width="79dp"
    android:layout_height="93dp"
    android:layout_alignBottom="@+id/progressBar2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="2dp"
    app:srcCompat="@drawable/bulb_on" />

<TextView
    android:id="@+id/textView_index"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignTop="@+id/textView_count"
    android:layout_marginLeft="32dp"
    android:layout_marginStart="32dp"
    android:text="no." />

 </RelativeLayout>

在适配器中,我们可以使用getItemViewType调用这两个布局。适配器中的代码应该是这样的:

data class MainAdapter(val context: Context ,val items: ArrayList<Any>, val indices: ArrayList<String>, var postList: List<Post>): RecyclerView.Adapter<CustomViewHolder>() {

val TYPE_TOPIC = 1
val TYPE_SUBTOPIC = 0
var topic=1
override fun getItemViewType(position: Int): Int {
    val item = items.get(position) as LinkedHashMap<String,Int>
    if (item.containsValue(-1)){
        return TYPE_TOPIC
    } else {
        return TYPE_SUBTOPIC
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
    if (viewType==1) {
        val tlayout = LayoutInflater.from(parent.context).inflate(R.layout.topics, parent, false)
        return CustomViewHolder(tlayout)
    } else {
        val slayout = LayoutInflater.from(parent.context).inflate(R.layout.subtopic, parent, false)
        return CustomViewHolder(slayout)
    }
}

override fun getItemCount(): Int {
    return items.count()
}

override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
    holder.setIsRecyclable(false)
    if (holder.itemViewType==1) {
            //do something
    }
    else{
          //do something
        }

  }
 }

  class CustomViewHolder(val view: View): RecyclerView.ViewHolder(view){
  }

感谢 androidAhmed、DenisLoh 和 Mohamed Mohaideen AH 的支持。