我有一个自定义视图CustomSettingEntry
这是它的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/layout_custom_setting_entry_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/custom_setting_entry_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
然后我在片段中使用它并为其分配一个id:
<com.mypackage.name.CustomSettingEntry
android:id="@+id/layout_notification_setting"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:setting_title="@string/title"
app:setting_subtitle="@string/subtitle" />
我的问题是ID为layout_custom_setting_entry_container
的LinearLayout与ID为layout_notification_setting
的用法之间的区别是什么?他们是指同一件事吗?
如果我在片段内的自定义视图上设置了一个单击侦听器,那么稍后在某些情况下禁用单击自定义视图中的根LinearLayout,这会停止监听器吗?
答案 0 :(得分:1)
我理解您的自定义视图是LinearLayout
的子类,它会扩展xml布局。如果是,则生成的视图层次结构为
[LinearLayout (actually a CustomSettingEntry), id : layout_notification_setting]
[LinearLayout, id : layout_custom_setting_entry_container]
...
所以有两个级别的视图组,每个视图组都有自己的id。
顺便说一下,这是低效的,因为外部视图组(您的自定义类)只有一个子节点(xml的根节点)。
解决方案是使用<merge>
作为xml布局的根目录跳过一个级别。见Optimize by merging 或Inflating layout for your custom view
了解更多详情。