Java 使用kotlin开发的android应用程序中的布局问题和错误

Java 使用kotlin开发的android应用程序中的布局问题和错误,java,android,xml,kotlin,Java,Android,Xml,Kotlin,我昨天刚进入kotlin,我尝试使用Android studio 3.0 Canary 2和JRE 1.8.0创建一个基本计算器。不幸的是,当我将应用程序安装到手机中时,结果与下图不同 在我的android工作室,设计是这样的 这是我的xml <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://s

我昨天刚进入kotlin,我尝试使用Android studio 3.0 Canary 2和JRE 1.8.0创建一个基本计算器。不幸的是,当我将应用程序安装到手机中时,结果与下图不同

在我的android工作室,设计是这样的

这是我的xml

 <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 
    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="com.example.jeffrey.kotlincalculator.MainActivity">

    <EditText
        android:id="@+id/editText_num1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="number"
        android:hint="Input Number 1"
        tools:layout_editor_absoluteX="40dp"
        tools:layout_editor_absoluteY="27dp" />

    <EditText
        android:id="@+id/editText_num2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="number"
        android:hint="Input Number 2"
        tools:layout_editor_absoluteX="40dp"
        tools:layout_editor_absoluteY="92dp" />

    <TextView
        android:id="@+id/textview_result"
        android:layout_width="345dp"
        android:layout_height="39dp"
        android:text="Result"
        android:textAppearance="@android:style/TextAppearance"
        android:textAlignment="center"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteY="159dp"
        tools:layout_editor_absoluteX="20dp" />

    <Button
        android:id="@+id/button_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="48dp"
        android:text="+"
        app:layout_constraintLeft_toLeftOf="parent"
        tools:layout_editor_absoluteY="219dp" />

    <Button
        android:id="@+id/button_minus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="-"
        tools:layout_editor_absoluteY="291dp"
        tools:layout_editor_absoluteX="48dp" />

    <Button
        android:id="@+id/button_multiple"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="*"
        tools:layout_editor_absoluteX="266dp"
        tools:layout_editor_absoluteY="219dp" />

    <Button
        android:id="@+id/button_divide"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="/"
        tools:layout_editor_absoluteX="266dp"
        tools:layout_editor_absoluteY="291dp" />
</android.support.constraint.ConstraintLayout>
这显然表明INT是一个错误

这是我的主要活动代码

package com.example.jeffrey.kotlincalculator

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        val result = findViewById(R.id.textview_result) as TextView
        val button_add = findViewById(R.id.button_add) as Button
        val button_minus = findViewById(R.id.button_minus) as Button
        val button_multiple = findViewById(R.id.button_multiple) as Button
        val button_divide = findViewById(R.id.button_divide) as Button

        button_add.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() + getNum2()).toString()
        })

        button_minus.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() - getNum2()).toString()
        })

        button_multiple.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() * getNum2()).toString()
        })

        button_divide.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() / getNum2()).toString()
        })
    }

    fun getNum1(): Int{
        val input_num1 = findViewById(R.id.editText_num1) as EditText;
        return Integer.parseInt(input_num1.text.toString());
    }

    fun getNum2(): Int{
        val input_num2 = findViewById(R.id.editText_num2) as EditText;
        return Integer.parseInt(input_num2.text.toString());
    }
}

事实证明,当我解析从手机中检索到的字符串的int时是一个错误。请帮助:)

您的xml有
工具:布局编辑器\u absoluteX=“40dp”工具:布局编辑器\u absoluteY=“92dp”

元素,这意味着这些约束将仅应用于设计器窗口。以下培训可能会帮助您了解如何使用约束布局:

Kotlin不是问题所在。了解如何使用ConstraintLayout以及如何在尝试解析数字之前处理空输入字符串。感谢您的帮助:)它解决了我的问题,我也是android studio的新手。刚刚意识到约束对控制布局很重要。感谢您的帮助
package com.example.jeffrey.kotlincalculator

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        val result = findViewById(R.id.textview_result) as TextView
        val button_add = findViewById(R.id.button_add) as Button
        val button_minus = findViewById(R.id.button_minus) as Button
        val button_multiple = findViewById(R.id.button_multiple) as Button
        val button_divide = findViewById(R.id.button_divide) as Button

        button_add.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() + getNum2()).toString()
        })

        button_minus.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() - getNum2()).toString()
        })

        button_multiple.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() * getNum2()).toString()
        })

        button_divide.setOnClickListener(View.OnClickListener{
            view -> result.text = (getNum1() / getNum2()).toString()
        })
    }

    fun getNum1(): Int{
        val input_num1 = findViewById(R.id.editText_num1) as EditText;
        return Integer.parseInt(input_num1.text.toString());
    }

    fun getNum2(): Int{
        val input_num2 = findViewById(R.id.editText_num2) as EditText;
        return Integer.parseInt(input_num2.text.toString());
    }
}