gpt4 book ai didi

android - 以编程方式更改边距无法按预期工作

转载 作者:行者123 更新时间:2023-11-30 03:00:12 24 4
gpt4 key购买 nike

我有一个 GUI,其中 innerLayout 的初始边距是 0,10,0,100 并且在我的 Intent 中 hideinfoarea() 应该删除 infoLayout 并更改 0, 10,0,10showInfoarea() 中的边距应该恢复初始边距并再次显示 infoLayout。

不幸的是,当我设置这些边距时,一些布局变得无法很好地显示,例如标题离 mainLayout 太近,并且当我重新启用它时,一 block 图像将被 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>

最佳答案

小心,因为您可以阅读 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 .

此外,您还可以阅读引用资料中的另一件事:

Sets the margins, in pixels. A call to requestLayout() needs to be done so that the new margins are taken into account.

希望这对您有所帮助。

关于android - 以编程方式更改边距无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22650542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com