随着UI变得越来越复杂-但同时仍要重复进行某些操作,include
视图组件(或Java中带有RecyclerView
的{{1}})可能是最好的解。
但是,由于这些部分是静态的和特定的,所以我想知道是否有一种方法可以以仅XML /可编辑预览的样式构建这些UI?
下面是一个更详细的问题:我想建立一个设置页面,其中包含以下内容:
布局应该是一个列表,其中填充有项目-每个项目都有图标,文本和箭头。
我该怎么办?
我首先想到的是使用Adapter
。
我为单个项目名称include
(以下是简化版本)构建布局:
item_option_standard.xml
并通过将<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
android:background="@android:color/background_light">
<ImageView
android:id="@+id/itemIcon" />
<TextView
android:id="@+id/itemTitle" />
<TextView
android:id="@+id/itemSubtitle" />
<ImageButton
android:id="@+id/itemNext" />
<View
android:id="@+id/divider" />
</android.support.constraint.ConstraintLayout>
放入我的include
中来重新使用它:
ScrollView
在编辑器中,显示为:
最后一步是逐步修改内容。我写了一个辅助函数:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:background="@color/colorPrimaryDark">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
android:id="@+id/optMyCash"
layout="@layout/item_option_standard"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<include
android:id="@+id/optHistory"
layout="@layout/item_option_standard"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<include
android:id="@+id/optAnnouncement"
layout="@layout/item_option_standard"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!-- and so on... -->
</LinearLayout>
</ScrollView>
并在我的public static void SetupOption(@NonNull View itemView, @DrawableRes int iconId, @NonNull String itemTitle, View.OnClickListener onClickListener) {
ImageView iconView = itemView.findViewById(R.id.itemIcon);
iconView.setImageResource(iconId);
TextView titleView = itemView.findViewById(R.id.itemTitle);
titleView.setText(itemTitle);
itemView.setOnClickListener(onClickListener);
}
中使用它:
OnCreate
是否有其他方法可以执行“第3步”?尤其是,是否有可能以xml /更静态/编辑器可预览的方式做到这一点?无法在编辑器中预览超出范围的方法,并且这种方法难以查看,难以维护(还有某种效率低下的东西?)
答案 0 :(得分:1)
您必须动态添加视图。并将标签设置为您要用于click事件的视图,在click事件中,您将获得一个视图,并且只需获取标签即可区分click事件。 see here
-如果您遇到ERROR
或其他问题,请在下面进行注释。