Android获取布局父ID

时间:2014-03-31 10:34:31

标签: android layout parent

我想知道View和ViewParent有什么区别?我正在尝试获取ImageView的父级的ID,但我不能这样做:

myImageView.getParent().getId();

那么有另一种获取此ID的方法吗?

4 个答案:

答案 0 :(得分:6)

  

我想知道View和ViewParent有什么区别?

View是一个类,ViewParent是一个接口。

虽然许多常见的布局类实现了ViewParent接口,但不能保证。

您遇到的问题是myImageView.getParent()返回的ViewParent并未直接公开getId()方法。

正如其他人所说,使用...

ViewParent投射到View
((View) myImageView.getParent()).getId();

...应该在编译时工作,但要注意以下内容......

  1. 如果父View未实现ViewParent接口,则转换将失败。
  2. 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 工具>布局检查器

这将使您更好地了解视图在树中的显示方式,然后您可以轻松地确定谁是谁的父母