使用 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 的支持。
我要使用 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 的支持。