为什么输入类型“ numberDecimal | numberSigned”在Android Studio中不起作用

时间:2019-11-13 20:31:56

标签: java android android-studio android-layout

我正在尝试遵循一个在Android Studio中构建非常基本的计算器的教程。像这里的很多人一样,我一直努力尝试使用按钮在EditText对象中添加小数点。

我已经阅读了有关类似问题的许多问题的答案。但是,它们似乎都不起作用。我尝试修复的代码如下。如果有人可以看一眼,也许我发现了我看不到的东西,我将非常感激。

Xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">

<EditText
    android:id="@+id/newNumber"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:inputType="numberDecimal|numberSigned"
    [I have also tried adding this -> android:digits="0123456789.,"]
    tools:layout_editor_absoluteX="201dp"
    tools:layout_editor_absoluteY="8dp" />


<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="48dp"
    android:text="1"
    tools:layout_editor_absoluteX="212dp"
    tools:layout_editor_absoluteY="79dp" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="48dp"
    android:text="2"
    app:layout_constraintBaseline_toBaselineOf="@+id/button1"
    app:layout_constraintStart_toEndOf="@+id/button1" />

<Button
    android:id="@+id/buttonDot"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="48dp"
    android:text="."
    app:layout_constraintStart_toEndOf="@+id/button2"
    app:layout_constraintTop_toTopOf="@+id/button2" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.calculator;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private EditText newNumber;

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

    newNumber = (EditText) findViewById(R.id.newNumber);

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    Button buttonDot = (Button) findViewById(R.id.buttonDot);

    // Instantiate listener
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button b = (Button) v;
            newNumber.append(b.getText().toString());
        }
    };

    button1.setOnClickListener(listener);
    button2.setOnClickListener(listener);
    buttonDot.setOnClickListener(listener);
}
}

非常感谢!

1 个答案:

答案 0 :(得分:2)

android:inputType="numberSigned"

用于接受十进制输入,因此从0到9的所有数字(包括小数点符号(。))只能是输入值。而且效果很好。我不知道逗号出现在图片中的位置。尝试使用TextView.setRawInputType()对应于android:inputType属性。