所以我有一个布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/rl_tooltip"
android:visibility="gone"
tools:visibility="visible">
<View
android:id="@+id/v_triangle"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="left"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="-15dp"
android:background="@drawable/tooltip_triangle" />
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/v_triangle"
android:background="@drawable/tooltip_bg"
android:padding="10dp"
android:textColor="@color/color_fefefe"
tools:text="New Tooltip text" />
</LinearLayout>
我正在这样膨胀
View content = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_tooltip, viewGroup, false);
View v = viewGroup.findViewById(R.id.rl_tooltip);
所以这就是当我将这个内容视图添加到父布局时它的工作正常,布局宽度wrap_content在计算后大约是400px,但是当我更改子视图的layoutparams时v_triangle
LinearLayout.LayoutParams marginLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
marginLayoutParams.gravity = Gravity.RIGHT;
contentView.findViewById(R.id.v_triangle).setLayoutParams(marginLayoutParams);
像这样,布局宽度现在是1080px(即屏幕宽度)。
所以我不明白为什么布局的行为正在发生变化。我需要该视图的实际宽度。
答案 0 :(得分:0)
将您的代码更改为:
View triangle = contentView.findViewById(R.id.v_triangle);
LinearLayout.LayoutParams marginLayoutParams = (LinearLayout.LayoutParams) triangle.getLayoutParams();
marginLayoutParams.gravity = Gravity.RIGHT;
triangle.setLayoutParams(marginLayoutParams);
问题是您的v_triangle
视图没有任何内容可以定义其宽度/高度(android:background
没有定义内在尺寸),所以当你写
LinearLayout.LayoutParams marginLayoutParams =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
你实际上最终会看到一个尽可能大的视图。而不是创建新的LayoutParams
对象,只需通过调用View.getLayoutParams()
重新使用现有的对象。请注意,您仍需要使用View.setLayoutParams()
重新分配参数,以使更改生效。