gpt4 book ai didi

Android:访问兄弟 View

转载 作者:搜寻专家 更新时间:2023-11-01 09:15:14 26 4
gpt4 key购买 nike

我有一个 Activity,它扩展了一个具有自定义 View 的 XML FrameLayout,以及一个包含许多 Text/ImageView 的 RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<my.package.name.CanvasView
android:id="@+id/canvas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="24dp"
android:background="#66000000">
<TextView
android:id="@+id/toolbar_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:gravity="right|center_vertical"
android:textColor="#FFFFFFFF"
android:shadowColor="#000000"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="2" />
<ImageView
android:id="@+id/toolbar_notification"
android:layout_toLeftOf="@+id/toolbar_time"
android:layout_width="20dp"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:gravity="center|center_vertical" />
<TextView
android:id="@+id/toolbar_title"
android:layout_toLeftOf="@+id/toolbar_notification"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:gravity="left|center_vertical"
android:singleLine="true"
android:ellipsize="marquee"
android:textColor="#FFFFFFFF"
android:shadowColor="#000000"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="2" />
</RelativeLayout>
</FrameLayout>

在自定义“CanvasView”中,我做了一些绘图,并拦截了 onTouchEvent() 等。根据用户在 View 中的操作,我想更新其中一个 TextView,特别是工具栏_通知。最好在 CanvasView 本身中执行此操作,但由于 TextView 不是它的 subview ,我无法通过 findViewById() 访问它。

我试过了 this solution ,但每次我尝试通过以下方式访问父 View 的属性时,我都会收到“由以下原因引起:android.view.InflateException:二进制 XML 文件第 5 行:错误膨胀类 my.package.name.CanvasView”的 RuntimeException:

ViewGroup parentView = (ViewGroup) getParent();
parentView.getChildCount();

有什么建议吗?

谢谢,

保罗

最佳答案

我会在您的自定义 Canvas 上创建一个 Listener 接口(interface),并让您的 Activity 实现它。在您的触摸事件中,您可以调用 Listener 方法并返回到 Activity。

这样做的原因:

  • 您的 Activity 已经知道层次结构中的所有 View 。
  • 即使您的 TextView 移动,此方法仍然有效。
  • 与框架的工作方式更加一致

在您的自定义 Canvas 中:

public static interface Listener {
public void someEventHappened(String moreInfo);
}

private Listener listener;

public void setListener(Listener listener) { this.listener = listener; }

在你的Activity中,实现接口(interface)

public class MyActivity extends Activity implements MyCanvas.Listener { ...

并在 Activity 的 onCreate() 方法中设置监听器:

myCanvas.setListener(this);

然后您可以将您的 TextView 更改代码放在 Activity 内的回调中:

public void someEventHappened(String moreInfo) {
TextView myTextView = (TextView) findViewById(R.id.my_text_view);
myTextView.setText(moreInfo);
}

关于Android:访问兄弟 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com