Как программно установить android: layout_row?

#java #android

#java #Android

Вопрос:

Вопрос выше. Это атрибут activity.xml with android:layout_row :

 <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    android:id="@ id/mainWindow"
    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=".MainActivity"
    >

    <GridLayout
        android:id="@ id/gridLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:rowCount="1"
        android:columnCount="2"
        android:useDefaultMargins="true"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_row="0"
            android:layout_column="0"
            android:background="@drawable/shape"
            android:gravity="center"
            android:text="Hallo"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_row="0"
            android:layout_column="1"
            android:background="@drawable/shape"
            android:gravity="center"
            android:text="Hallo"
            />

    </GridLayout>

</android.support.constraint.ConstraintLayout>
  

Теперь мой новый activity.xml файл:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    android:id="@ id/mainWindow"
    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=".MainActivity"
    >

    <GridLayout
        android:id="@ id/gridLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:rowCount="1"
        android:columnCount="2"
        android:useDefaultMargins="true"
        >


    </GridLayout>

</android.support.constraint.ConstraintLayout>
  

и мой MainActivity.java является:

 package com.example.sudokusolver;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.GridLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridLayout.LayoutParams lp= new GridLayout.LayoutParams();
        lp.width= GridLayout.LayoutParams.MATCH_PARENT;
        lp.height= GridLayout.LayoutParams.MATCH_PARENT;
        lp.columnSpec= GridLayout.spec(GridLayout.UNDEFINED, 1f);
        lp.rowSpec= GridLayout.spec(GridLayout.UNDEFINED, 1f);

        TextView textView= new TextView(this);
        textView.setLayoutParams(lp);
        textView.setBackgroundResource(R.drawable.shape);
        textView.setGravity(Gravity.CENTER);
        textView.setText("Hallo");

        TextView textView1= new TextView(this);
        textView1.setLayoutParams(lp);
        textView1.setBackgroundResource(R.drawable.shape);
        textView1.setGravity(Gravity.CENTER);
        textView1.setText("Hallo");

        GridLayout grid= findViewById(R.id.gridLayout);
        grid.addView(textView, 0);
        grid.addView(textView1, 1);

    }
}
  

Итак, как я могу установить параметры set android:layout_row и android:layout_column= в Java?

Ответ №1:

вы можете установить их LayoutParams следующим образом :

 grid.addView(subview, new GridLayout.LayoutParams(
                          GridLayout.spec(1, GridLayout.CENTER),
                          GridLayout.spec(1, GridLayout.CENTER)));
  

Комментарии:

1. И как я могу установить его в положение 0, 1, например

2. GridLayout.spec(0, GridLayout. ЦЕНТР)

3. Таким образом, я не могу добавить более одного элемента. Ошибка: java.lang.IllegalArgumentException: row indices (start span) mustn't exceed the row count.

4. Используйте целое число i и увеличивайте его

5. Можете ли вы привести пример? Я пробовал grid.addView(subview, new GridLayout.LayoutParams( GridLayout.spec(0, GridLayout.CENTER), GridLayout.spec(0, GridLayout.CENTER))); nad grid.addView(subview, new GridLayout.LayoutParams( GridLayout.spec(0, GridLayout.CENTER), GridLayout.spec(1, GridLayout.CENTER))); , но это не работает.