我想知道View和ViewParent有什么区别?我正在尝试获取ImageView
的父级的ID,但我不能这样做:
myImageView.getParent().getId();
那么有另一种获取此ID的方法吗?
答案 0 :(得分:6)
我想知道View和ViewParent有什么区别?
View
是一个类,ViewParent
是一个接口。
虽然许多常见的布局类实现了ViewParent
接口,但不能保证。
您遇到的问题是myImageView.getParent()
返回的ViewParent
并未直接公开getId()
方法。
正如其他人所说,使用...
将ViewParent
投射到View
((View) myImageView.getParent()).getId();
...应该在编译时工作,但要注意以下内容......
View
未实现ViewParent
接口,则转换将失败。View
必须在布局文件中定义资源ID为(例如)android:id=@+id/myParentViewId
,或者对getId
的调用将返回null
答案 1 :(得分:2)
您必须将父视图转换为View
,以便您可以使用getId()
方法,((View) myImageView.getParent()).getId()
答案 2 :(得分:1)
周围的imageview返回父布局ID。
android:id="@+id/returnid"
示例:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/returnid"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<iamageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="24dp"
android:text="test"
android:background="@drawable/white"
/>
</RelativeLayout>
答案 3 :(得分:1)
当您有一个没有ID的父视图,但您有一个具有ID的孩子时,最好的选择是使用parent
:
val layoutWithId: FrameLayout = findViewById(R.id.withWithId)
val noIdLayout: RelativeLayout = (layoutWithId as FrameLayout).parent as RelativeLayout
在这里,用于识别视图树的合适工具是AS菜单中的 Layout Inspector : 工具>布局检查器
这将使您更好地了解视图在树中的显示方式,然后您可以轻松地确定谁是谁的父母