我有一个GUI,其中innerLayout
的最初边距为0,10,0,100
,我的意图hideinfoarea()
应删除infoLayout
并更改0, 10,0,10
中的边距showInfoarea()
应恢复初始边距并再次显示infoLayout。
不幸的是,当我设置这些边距时,一些布局没有很好地显示,例如标题太靠近mainLayout,当我重新启用它时,infoLayout将覆盖一段图像。 尽管在布局编辑器的测试中,边距是完美的。
当我调用showInfoarea()
时为什么布局边距没有恢复到原始条件,如果我只是反转hideInfoarea()
的操作?
这是我的代码
RelativeLayout mainLayout;
LinearLayout innerLayout;
public void hideInfoarea(){
mainLayout = (RelativeLayout) findViewById(R.id.mainContainer);
innerLayout = (LinearLayout) findViewById(R.id.innerLayout);
mainContainer.removeView(infoLayout);
//adjust margins
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) innerLayout.getLayoutParams();
params.setMargins(0, 10, 0, 10);
innerLayout.setLayoutParams(params);
}
public void showInfoarea(){
mainLayout = (RelativeLayout) findViewById(R.id.mainContainer);
innerLayout = (LinearLayout) findViewById(R.id.innerLayout);
mainContainer.addView(infoLayout);
//adjust margins
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) innerLayout.getLayoutParams();
params.setMargins(0, 10, 0, 100);
innerLayout.setLayoutParams(params);
}
这里是XML
<!-- The main content view -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:padding="5dp"
android:gravity="fill_horizontal|fill_vertical"
android:background="@color/Platinum"
android:id="@+id/mainLayout">
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Sample"
android:textSize="12dp"
android:layout_marginBottom="10dp"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/innerlayout"
android:layout_marginTop="10dp"
android:layout_marginBottom="100dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/imageView"
android:scaleType="fitXY"
android:src="@drawable/rectangle"
android:layout_marginBottom="100dp"
android:layout_marginTop="10dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="400dp"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:background="@drawable/background_label_mm"
android:layout_centerHorizontal="true"
android:orientation="vertical"
android:id="@+id/infoLayout"
android:layout_margin="5dp">
</LinearLayout>
</RelativeLayout>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#F3F3F4"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"/>
</android.support.v4.widget.DrawerLayout>
答案 0 :(得分:1)
请注意,因为您可以使用Reference setMargins(int left, int top, int right, int bottom)
方法使用px
并使用dp
布局。您必须进行如下转换:
// where "dp" is your value dip
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) dp, getResources().getDisplayMetrics());
// then set your margins
params.setMargins(0, px, 0, px);
请参阅此答案:What is the correct way to specify dimensions in DIP from Java code?,反之亦然:Converting pixels to dp。
另外,你可以阅读另一篇参考文献:
设置边距(以像素为单位)。 需要调用requestLayout(),以便考虑新的边距。
希望这有帮助。