Android获取布局父ID

Posted

技术标签:

【中文标题】Android获取布局父ID【英文标题】:Android get layout parent id 【发布时间】:2014-03-31 10:34:30 【问题描述】:

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

myImageView.getParent().getId();

那么还有其他方法可以获取此 id 吗?

【问题讨论】:

【参考方案1】:

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

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

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

您遇到的问题是myImageView.getParent() 正在返回一个ViewParent,它不直接公开getId() 方法。

正如其他人所说,将ViewParent 转换为View 使用...

((View) myImageView.getParent()).getId();

...应该在编译时工作,但请注意以下...

    如果父 View 未实现 ViewParent 接口,则转换将失败。 父View 必须在布局文件中定义为(例如)android:id=@+id/myParentViewId 的资源ID,否则对getId 的调用将返回null

【讨论】:

【参考方案2】:

您必须将您的父视图转换为View,因此您可以使用getId() 方法,使用((View) myImageView.getParent()).getId()

【讨论】:

【参考方案3】:

周围的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_
    android:layout_ >

    <iamageView
        android:id="@+id/image"
        android:layout_
        android:layout_
        android:text="test"
        android:background="@drawable/white"
        />

</RelativeLayout>

【讨论】:

【参考方案4】:

当你有一个没有 id 的父视图,但你有一个有 id 的子视图时,最好的选择是使用parent

val layoutWithId: FrameLayout = findViewById(R.id.withWithId)
val noIdLayout: RelativeLayout = (layoutWithId as FrameLayout).parent as RelativeLayout

此处识别视图树的适当工具是 AS 菜单中的 Layout Inspector工具 > 布局检查器

它将让您更好地了解视图在树中的显示方式,然后您可以轻松地知道哪个是谁的父级

【讨论】:

以上是关于Android获取布局父ID的主要内容,如果未能解决你的问题,请参考以下文章

Android:控件布局(相对布局)RelativeLayout

Android获取布局父ID

Android开发工程师文集-相关控件的讲解,五大布局

android 相对布局中怎样让组件水平平分父容器 比如2个按钮在一行 怎样让其各占父容器的一半?

如何获取android中元素相对于父元素的位置/偏移量?

android布局调整父级大小而不调整子级大小