背景:我正在创建一个可以创建基于时间的警报,基于位置或两者的应用程序,并在创建警报的活动中为每个时间戳和地图设置复选框,如果您不想要一个,则取消选中它警报中的这些功能。以下是此活动的图片 - http://prntscr.com/dr1s74。
如果取消选中地图复选框,则会移除片段并将radioGroup的布局参数设置为标题下方(因为地图现已消失),居中并添加边距。
虽然addRule(RelativeLayout.BELOW,id)有效,但setMargins(left,top,right,bottom)和addRule(RelativeLayout.CENTER_HORIZONTAL)都不起作用,因此radioGroup偏离中心且没有正确的空间在标题下面。
XML活动:
可能问题的描述:我认为它发生的唯一原因是我将CoordinatorLayout作为父布局(因为它在FAB和SnackBar之间的交互)和包含RelativeLayout的ScrollView(如果你有更好的话,请打开建议)办法)。而且由于某些原因,在尝试向布局参数添加规则时会出现问题。 XML代码(删除了radioButtons和CheckBox以便于查看):
<android.support.design.widget.FloatingActionButton
android:id="@+id/saveAlarm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_marginBottom="@dimen/fab_margin"
android:layout_marginRight="@dimen/fab_margin"
android:onClick="fabClicked"
app:srcCompat="@android:drawable/ic_menu_save" />
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative_layout_alarm_creator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.rome.locationalarm.AlarmCreator">
<EditText
android:id="@+id/alarmTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:hint="Alarm title" />
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_below="@+id/alarmTitle"
android:layout_marginTop="10dp"
tools:context="com.example.rome.locationalarm.MapsFragment" />
<com.example.rome.locationalarm.CustomTimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/days"
android:layout_marginTop="10dp" />
<TextView
android:id="@+id/chooseLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/map"
android:layout_centerHorizontal="true"
android:text="Choose Location" />
<RadioGroup
android:id="@+id/days"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/map"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:orientation="horizontal">
</RadioGroup>
</RelativeLayout>
</ScrollView>
JAVA代码(仅限重要部分):
if(locationCheckBox.isChecked()){
//If user wants location
RelativeLayout.LayoutParams layoutParams= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.BELOW, mapFragment.getId());
//All of these don't work
layoutParams.setMargins(0, 10, 0, 0); // (left, top, right, bottom)
//All of these are tries to center the radioGroup
layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.removeView(radioGroup);
layout.addView(radioGroup, layoutParams);
//layout.updateViewLayout(radioGroup, layoutParams); doesn't work as well.
感谢您抽出宝贵时间寻求帮助,度过愉快的一年!
答案 0 :(得分:0)
你需要这样做才能获得LayoutParams
;for(var i=0;i<locations.length;i++){