Android布局中MyView遮挡TextView问题求助
Hey there! Let's fix that annoying issue where your TextView gets blocked by MyView. The root cause here is almost certainly related to view hierarchy order or your layout container's stacking behavior—when you add MyView via b.addView(a), it gets placed on top of the existing views (Button and TextView) that were loaded from your XML, hence covering the TextView. Here are actionable solutions to sort this out:
1. Adjust MyView's insertion position (quickest fix)
If you're using a container like FrameLayout or RelativeLayout that allows view stacking, add MyView to the bottom of the container's hierarchy instead of the top. You can do this by specifying an index of 0 when adding:
// Insert MyView at the first position (bottom of the view stack) b.addView(a, 0);
This pushes MyView below the TextView that was already loaded from your XML, so the TextView will show up on top.
2. Restrict MyView's size to avoid full coverage
If MyView is set to match_parent for width/height, it'll cover the entire container and block everything underneath. Fix this by setting proper layout parameters to limit its size:
// Use the LayoutParams matching your container type (e.g., FrameLayout/LinearLayout) ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ); // Optional: Set position for FrameLayout if (params instanceof FrameLayout.LayoutParams) { ((FrameLayout.LayoutParams) params).gravity = Gravity.TOP | Gravity.LEFT; } b.addView(a, params);
Now MyView will only take up the space it needs, leaving the TextView visible.
3. Tweak view elevation (Z-axis order)
On Android 5.0 (API 21) and above, you can control which view sits on top using elevation:
- Option 1: Give your TextView a higher elevation in XML:
<TextView android:id="@+id/your_textview" ... android:elevation="5dp" />
- Option 2: Lower MyView's Z-axis value in code:
// Push MyView below the TextView by setting a negative Z value a.setZ(-1f);
4. Check your layout container type
If you're using LinearLayout, it's supposed to arrange views linearly—so the TextView disappearing might mean MyView is taking up all available space and pushing it out. Fix this by adjusting weights or orientation:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f // Assign weight to split space evenly with TextView ); b.addView(a, params);
Test out these solutions—usually the first one (adjusting insertion position) works like a charm for stacking issues!
内容的提问来源于stack exchange,提问作者Dijital Dünya

