一些RelativeLayout.LayoutParams不起作用

时间:2017-01-03 17:25:40

标签: android layoutparams

背景:我正在创建一个可以创建基于时间的警报,基于位置或两者的应用程序,并在创建警报的活动中为每个时间戳和地图设置复选框,如果您不想要一个,则取消选中它警报中的这些功能。以下是此活动的图片 - 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.

感谢您抽出宝贵时间寻求帮助,度过愉快的一年!

1 个答案:

答案 0 :(得分:0)

你需要这样做才能获得LayoutParams

;for(var i=0;i&lt;locations.length;i++){