以编程方式修改边距以进行查看

时间:2015-02-08 17:57:15

标签: android android-layout android-fragments android-view

我正在尝试修改视图的边距。

如果我在片段的onCreateView上得到视图的边距(在给布局膨胀之后),我会得到在xml上定义的值。如果我将边距值更改为0,我会得到所需的结果。

这是片段在进行任何更改之前的样子: enter image description here

如果删除onCreateView上的边距,我会得到这个(这就是我想要的): enter image description here

我遇到的问题是,如果我获得相同视图的边距,但是在调用onCreateView之后,边距将显示为0,如果我尝试通过添加负边距来移除边距,我得到这个(酒吧变得更小):

enter image description here

这是我的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后修改边距?

0 个答案:

没有答案