我正在尝试修改视图的边距。
如果我在片段的onCreateView上得到视图的边距(在给布局膨胀之后),我会得到在xml上定义的值。如果我将边距值更改为0,我会得到所需的结果。
这是片段在进行任何更改之前的样子:
如果删除onCreateView上的边距,我会得到这个(这就是我想要的):
我遇到的问题是,如果我获得相同视图的边距,但是在调用onCreateView之后,边距将显示为0,如果我尝试通过添加负边距来移除边距,我得到这个(酒吧变得更小):
这是我的search_bar_layout.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/searchBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="8dp"
android:padding="6dp"
android:background="@drawable/rectangle"
android:focusable="true"
android:focusableInTouchMode="true">
<!--Some elements -->
</LinearLayout>
然后在代码中我将LinearLayout作为视图,并更新边距。这就是我在onCreateView上做的事情(它实现了预期的结果):
View v = inflater.inflate(R.layout.search_bar_layout, container, false);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) v.getLayoutParams();
Log.d("MARGIN", String.valueOf(lp.leftMargin)); // is 24
lp.setMargins(0, 0, 0, 0);
view.setLayoutParams(lp);
这就是我在onCreateView之后运行的(不会删除边距,使条形更小):
LinearLayout ll = (LinearLayout)findViewById(R.id.searchBar);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) ll.getLayoutParams();
Log.d("MARGIN", String.valueOf(lp.leftMargin)); // is 0
lp.setMargins(-24, -24, -24, -24); // Changing to negative value because current value is 0
view.setLayoutParams(lp);
为什么会这样?如何在调用onCreateView后修改边距?