在 RelativeLayout 上设置边距后元素消失
Element disappears after setting margins on RelativeLayout
我正在为学校开发一个小应用程序作为项目,我需要动态移动一个 FAB。
我在 Relative 布局中有一个 FloatingActionButton,它实际上是底部对齐和水平对齐的。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.pagiaro.nicola.quiz2_0.HomeActivity"
android:id="@+id/home_rl" >
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
app:fabSize="normal"
app:srcCompat="@drawable/ic_quiz"
android:id="@+id/fab_inizia"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin"
app:backgroundTint="@color/accentColor" />
</RelativeLayout>
我用于移动它的代码是:
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_inizia);
final RelativeLayout.LayoutParams rlp_keyboard_is_open = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
rlp_keyboard_is_open.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rlp_keyboard_is_open.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
fab.setLayoutParams(rlp_keyboard_is_open);
但是使用此代码,我的 FAB 没有右边距和底部边距。当我添加代码来添加边距时,问题就来了。
rlp_keyboard_is_open.setMargins(0, 0, R.dimen.activity_horizontal_margin, R.dimen.activity_vertical_margin);
或
rlp_keyboard_is_open.rightMargin = R.dimen.activity_horizontal_margin;
rlp_keyboard_is_open.bottonMargin = R.dimen.activity_vertical_margin;
如果我添加这段代码,FAB 就会消失。
我搜索了很多解决方案,但没有找到。有什么帮助吗?谢谢
使用
getResources().getDimension(R.dimen.activity_horizontal_margin)
或
getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin)
而不是直接使用 R.dimen.activity_horizontal_margin
,因为它 returns 分配给 R.dimen.activity_horizontal_margin
的内部 ID 而不是您在 XML 文件中分配的值。
我正在为学校开发一个小应用程序作为项目,我需要动态移动一个 FAB。 我在 Relative 布局中有一个 FloatingActionButton,它实际上是底部对齐和水平对齐的。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.pagiaro.nicola.quiz2_0.HomeActivity"
android:id="@+id/home_rl" >
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
app:fabSize="normal"
app:srcCompat="@drawable/ic_quiz"
android:id="@+id/fab_inizia"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin"
app:backgroundTint="@color/accentColor" />
</RelativeLayout>
我用于移动它的代码是:
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_inizia);
final RelativeLayout.LayoutParams rlp_keyboard_is_open = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
rlp_keyboard_is_open.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rlp_keyboard_is_open.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
fab.setLayoutParams(rlp_keyboard_is_open);
但是使用此代码,我的 FAB 没有右边距和底部边距。当我添加代码来添加边距时,问题就来了。
rlp_keyboard_is_open.setMargins(0, 0, R.dimen.activity_horizontal_margin, R.dimen.activity_vertical_margin);
或
rlp_keyboard_is_open.rightMargin = R.dimen.activity_horizontal_margin;
rlp_keyboard_is_open.bottonMargin = R.dimen.activity_vertical_margin;
如果我添加这段代码,FAB 就会消失。 我搜索了很多解决方案,但没有找到。有什么帮助吗?谢谢
使用
getResources().getDimension(R.dimen.activity_horizontal_margin)
或
getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin)
而不是直接使用 R.dimen.activity_horizontal_margin
,因为它 returns 分配给 R.dimen.activity_horizontal_margin
的内部 ID 而不是您在 XML 文件中分配的值。