Android Fragment中如何通过带ID的子TextView获取无ID父布局
问题:通过子TextView获取无ID的父布局并修改背景色?
在Fragment中,我需要修改指定ID的AppCompatTextView的父LinearLayoutCompat的背景色,想知道能不能通过这个子TextView动态获取没有设置ID的父布局,然后修改它的背景色?我原本以为Android里会有类似jQuery中.parent()的方法。
对应的XML代码如下:
<androidx.appcompat.widget.LinearLayoutCompat android:layout_width="40dp" android:layout_height="30dp" android:layout_marginLeft="12dp" android:gravity="center" > <androidx.appcompat.widget.AppCompatTextView android:id="@+id/actv_notify_all" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/gray_7f" android:textSize="13sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="진료" /> </androidx.appcompat.widget.LinearLayoutCompat>
解决方案
完全可以实现,Android里确实有类似jQuery .parent() 的方法,就是View自带的getParent():
Kotlin 实现
// 在Fragment的onViewCreated等方法中获取TextView val textView = view.findViewById<AppCompatTextView>(R.id.actv_notify_all) // 获取父布局并安全强转 val parentLayout = textView.parent as? LinearLayoutCompat // 安全调用修改背景色 parentLayout?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.your_target_color))
Java 实现
// 在Fragment的onViewCreated等方法中获取TextView AppCompatTextView textView = view.findViewById(R.id.actv_notify_all); // 先判断父布局类型,避免类型转换崩溃 if (textView.getParent() instanceof LinearLayoutCompat) { LinearLayoutCompat parentLayout = (LinearLayoutCompat) textView.getParent(); parentLayout.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.your_target_color)); }
注意事项
getParent()返回的是当前View的直接父容器,正好匹配你的需求- 强转前一定要做类型判断(Kotlin用
as?,Java用instanceof),防止父布局类型不符引发崩溃 - 如果使用资源色,推荐用
ContextCompat.getColor()保证低版本系统兼容性
内容的提问来源于stack exchange,提问作者cy j
相关产品推荐
相关产品推荐

