Диапазон столбцов GridLayout не работает в Xamarin. android - PullRequest
0 голосов
/ 09 июля 2020

Я создал GridLayout, динамически определяющий его строки и столбец, после чего я пытаюсь добавить внутри него кнопку, которая также создается динамически.

Проблема в том, что я не могу разместить кнопку внутри 2 пролета колонн. Он заполнен только одним столбцом, даже если я даю диапазон столбцов как 2.

Ниже приведен код, который я пробовал. Пожалуйста, помогите, я застрял.

  protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    
        RelativeLayout mainlayout = new RelativeLayout(this);
        RelativeLayout.LayoutParams layoutparameter = new 
        RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, 
        RelativeLayout.LayoutParams.MatchParent);
        mainlayout.LayoutParameters = layoutparameter;
    
        GridLayout gl = getView();
    
        mainlayout.AddView(gl);
    
        SetContentView(mainlayout);
    }

 private GridLayout getView()
        {

            GridLayout gridlayout = new GridLayout(this);

            Button b = new Button(this);
            b.Text = "Button1";


            var p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent,
            ViewGroup.LayoutParams.MatchParent);
            gridlayout.LayoutParameters = p;

            gridlayout.RowCount = 2;
            gridlayout.ColumnCount = 2;

            addViewToGridLayout(gridlayout, b, 0, 1, 0, 2);// Here the column span given as 2.

            return gridlayout;
        }
    
 private void addViewToGridLayout(GridLayout pGridLayout, View view, int row, int pRowSpan, int column, int pColumnSpan)
        {
            Spec rowSpan = GridLayout.InvokeSpec(row, pRowSpan);
            Spec colspan = GridLayout.InvokeSpec(column, pColumnSpan);
            GridLayout.LayoutParams gridParam = new GridLayout.LayoutParams(
                    rowSpan, colspan);
            pGridLayout.AddView(view, gridParam);
        }

1 Ответ

1 голос
/ 10 июля 2020

Код может уместить кнопку внутри диапазона в 2 столбца. Но, если в столбце или строке ничего нет, изменения не вносятся.

Внесите изменения с помощью метода getView.

 private GridLayout getView()
    {

        GridLayout gridlayout = new GridLayout(this);

        TextView textView1 = new TextView(this);
        textView1.Text = "csll0";

        TextView textView2 = new TextView(this);
        textView2.Text = "csll1";

        TextView textView3 = new TextView(this);
        textView3.Text = "csll3";

        TextView textView4 = new TextView(this);
        textView4.Text = "csll4";

        Button b = new Button(this);
        b.Text = "Button1";


        var p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent,
        ViewGroup.LayoutParams.MatchParent);

        gridlayout.LayoutParameters = p;

        gridlayout.RowCount = 3;
        gridlayout.ColumnCount = 2;

        addViewToGridLayout(gridlayout, textView1, 0, 1, 0, 1);
        addViewToGridLayout(gridlayout, textView2, 0, 1, 1, 1); 
        addViewToGridLayout(gridlayout, textView3, 1, 1, 0, 1); 
        addViewToGridLayout(gridlayout, textView4, 1, 1, 1, 1);
        addViewToGridLayout(gridlayout, b, 2, 1, 0, 2);// Here the column span given as 2.


        return gridlayout;
    }

Установите диапазон столбца равным 1.

 addViewToGridLayout(gridlayout, b, 2, 1, 0, 1); 

enter image description here

Set the column span to 2.

 addViewToGridLayout(gridlayout, b, 2, 1, 0, 2);// Here the column span given as 2.

введите описание изображения здесь

...