установка полей на относительном макете не работает - PullRequest
0 голосов
/ 21 марта 2012

Я использовал FragmentTransaction для добавления фрагмента в FrameLayout. Я хочу динамически изменить поле RelativeLayout, используемое фрагментом. Однако поля не изменяются с RelativeLayout.layoutParams. Я также использовал setMargins(), и он не работал.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.infocard, container, false);

        RelativeLayout infoLayout = (RelativeLayout) view.findViewById(R.id.info);
        infoLayout.setOnClickListener(new EmptyClickListener());

        final int width = 250;
        final int height = 320;
        int leftMargin = 0;
        int topMargin = 0;
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);

        if (x - width < 0) {
            leftMargin = 0;
            System.out.println("left " + leftMargin);
        }
        else {
            leftMargin = x - width;
        }

        if (y >= 450 && y <= 480) {
            topMargin = y - height;
        }

        params.leftMargin = leftMargin;
        params.topMargin = topMargin;

        infoLayout.setLayoutParams(params);

1 Ответ

1 голос
/ 21 марта 2012

Попробуйте использовать

FrameLayout.LayoutParams

вместо

RelativeLayout.LayoutParams

Макеты ожидают, что тип params будет типом из родительского контейнера, а не типом представления, для которого вы устанавливаете

...