以编程方式生成的GridLayout的列被向右推送

问题描述 投票:0回答:2

我正在以编程方式生成GridLayoutTextViews。我希望TextViews的第二和第三列(GridLayout)具有相等的宽度,并且当TextViews中有很多文本时,我希望TextViews垂直向下扩展而不是占用更多空间空间。我试图通过以编程方式将第二个和第三个TextViews的列权重设置为1来实现这一点。但是,例如,当第二个TextView中有很多文本时,第二个和第三个TextViews就会得到推到一边。以下是屏幕截图:

enter image description here

但是,我希望我的应用程序看起来像这样:enter image description here

下面是我的XML代码:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:rowCount="1"
    android:columnCount="3">
    <!-- Difference Table -->
    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/difference_table"
        android:layout_width="match_parent"
        android:layout_column="0"
        android:layout_row="0"
        android:layout_columnWeight="1"
        android:layout_height="wrap_content"></LinearLayout>
</GridLayout>

下面是我的Kotlin代码:

val diffLayout = findViewById<LinearLayout>(R.id.difference_table)
var diffTable: GridLayout = GridLayout(this)

// Set the dimensions of the grid
diffTable.layoutParams =
    ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

diffTable.columnCount = 3;
diffTable.rowCount = 1;

// Create the three columns and add them to the grid
var lineNumber: TextView = TextView(this)
lineNumber.text = "asdf"
lineNumber.setTextColor(Color.parseColor("#000000"))
lineNumber.gravity = Gravity.LEFT

var currentLine1: TextView = TextView(this)
currentLine1.setTextColor(Color.parseColor("#000000"))
currentLine1.text = "asdfasdfasdfadfasdfadfasdfasdfasdfasdfasdfasdf"
lineNumber.gravity = Gravity.LEFT

// 3. Create the TextView representing the current line in Text 2
var currentLine2: TextView = TextView(this)
currentLine2.setTextColor(Color.parseColor("#000000"))
currentLine2.text = "asdfasdfasdfadfasdfadfasdfasdfasdfasdfasdfasdf"
lineNumber.gravity = Gravity.LEFT

// TODO: ENABLE LAYOUT WEIGHT FOR API < 21
diffTable.addView(lineNumber, GridLayout.LayoutParams(
    GridLayout.spec(0, GridLayout.CENTER),
    GridLayout.spec(0, GridLayout.CENTER, 0.0f)));

// Add the current line in Text 1 to the table
diffTable.addView(currentLine1, GridLayout.LayoutParams(
    GridLayout.spec(0, GridLayout.CENTER),
    GridLayout.spec(1, GridLayout.CENTER, 1.0f)));

// Add the current line in Text 2 to the table
diffTable.addView(currentLine2, GridLayout.LayoutParams(
    GridLayout.spec(0, GridLayout.CENTER),
    GridLayout.spec(2, GridLayout.CENTER, 1.0f)));
android kotlin textview android-xml android-gridlayout
2个回答
0
投票

1)扩展GridLayouts上的标志应该有问题。View中的两个GridLayout都应具有垂直和水平轴的权重。尝试为上面的第一和第二个View设置此参数。

final GridLayout.LayoutParams params = new GridLayout.LayoutParams(GridLayout.spec(
            GridLayout.UNDEFINED,GridLayout.FILL,1f),
            GridLayout.spec(GridLayout.UNDEFINED,GridLayout.FILL,1f)); 

2)作为替代和简单的解决方案。您可以用单个View容器替换上面的两个LinearLayout,它们可以自己处理重量。这样的事情。

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:nestedScrollingEnabled="true"
      android:orientation="horizontal">

        <LinearLayout
        android:id="@+id/view.line.1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

          <TextView]
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">
          </TextView>
       </LinearLayout>

        <LinearLayout
        android:id="@+id/view.line.2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

          <TextView]
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">
          </TextView>
       </LinearLayout>

    <LinearLayout>

0
投票

我在您之前的代码中做了一些修改,并添加了width = 0属性,可以达到您想要的显示效果

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//        setContentView(R.layout.activity_main)


//        val diffLayout = findViewById<LinearLayout>(R.id.difference_table)
//        val diffTable = findViewById<GridLayout>(R.id.grid_layout);
        var diffTable: GridLayout = GridLayout(this)

// Set the dimensions of the grid
        diffTable.layoutParams =
                ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

        diffTable.columnCount = 3
        diffTable.rowCount = 1

// Create the three columns and add them to the grid
        var lineNumber: TextView = TextView(this)
        lineNumber.text = "asdf"
        lineNumber.setTextColor(Color.parseColor("#000000"))
        lineNumber.gravity = Gravity.LEFT

        var currentLine1: TextView = TextView(this)
        currentLine1.setTextColor(Color.parseColor("#000000"))
        currentLine1.text = "asdfasdfasdfadfasdfadfasdfasdfasdfasdfasdfasdf"
        lineNumber.gravity = Gravity.CENTER

// 3. Create the TextView representing the current line in Text 2
        var currentLine2: TextView = TextView(this)
        currentLine2.setTextColor(Color.parseColor("#000000"))
        currentLine2.text = "asdfasdfasdfadfasdfadfasdfasdfasdfasdfasdfasdf"
        lineNumber.gravity = Gravity.CENTER

        var layoutParams = GridLayout.LayoutParams()
        layoutParams.rowSpec = GridLayout.spec(0, GridLayout.FILL)
        layoutParams.columnSpec = GridLayout.spec(0, GridLayout.FILL)

// TODO: ENABLE LAYOUT WEIGHT FOR API < 21
        diffTable.addView(lineNumber, layoutParams)

        var layoutParams1 = GridLayout.LayoutParams()
        layoutParams1.rowSpec = GridLayout.spec(0, GridLayout.FILL)
        layoutParams1.columnSpec = GridLayout.spec(1, GridLayout.FILL, 1f)
        layoutParams1.width = 0

// Add the current line in Text 1 to the table
        diffTable.addView(currentLine1, layoutParams1)

// Add the current line in Text 2 to the tableLEFT


        var layoutParams2 = GridLayout.LayoutParams()
        layoutParams2.rowSpec = GridLayout.spec(0, GridLayout.FILL)
        layoutParams2.columnSpec = GridLayout.spec(2, GridLayout.FILL, 1f)
        layoutParams2.width = 0

        diffTable.addView(currentLine2, layoutParams2)


        addContentView(diffTable, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT))

    }
© www.soinside.com 2019 - 2024. All rights reserved.