vbneil54
vbneil54

Reputation: 103

Making EditText input only accept numbers not working

My issue is I can't keep my EditText input from accepting alpha-numeric. This is on Android and it for an app I'm working on. I only want it to accept numbers.

I create the EditText on the fly. Below is the code to create them. This is the code for the entire Java file.

public class PartDetail extends Activity implements View.OnClickListener{

    private final int NUM_COL = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.part_detail);
        Bundle bundle = getIntent().getExtras();
        String btnName = bundle.getString("btnNameStored");
        String btnOrig = bundle.getString("btnOrig");

        TextView textView = (TextView) findViewById(R.id.txtBtnPushed);
        textView.setText(btnOrig);
        BufferedReader reader;
        InputStream is = null;

        // Get the name of the part picked and then grab the dimensions that are needed for that
        // part.

        try {

            is = getAssets().open(btnName);

            reader = new BufferedReader(new InputStreamReader(is));

            String line = reader.readLine();
            int lineLength = (line.length());

            //Used for debugging ---------------------------
            //System.out.println(" -- Text on Button --  " + btnName + " -- Line Length -- " +
            //        lineLength);
            // ------------------------------------

            TableLayout table = (TableLayout) findViewById(R.id.tblLayoutContent);

            while (line != null){

                TableRow tblRow = new TableRow(this);
                tblRow.setPadding(5, 30, 5, 5);
                table.addView(tblRow);
                line = line.toUpperCase();

                // sets the max number of col to 2 and iterates through the number of lines.
                // filling each cell with a Text Box with the name of each dimension of the part
                // that was picked.

                for (int col = 0; col < NUM_COL; col++) {
                    //This is the label of what measurement needs to be enter.
                    TextView lblName = new TextView(this);
                    // This is the number you enter for the measurement.
                    EditText txtPartMeasurement = new EditText(this);

                    // Set all the input attributes for the text boxes.
                    if (line == "QTY") {
                        txtPartMeasurement.setInputType(InputType.TYPE_CLASS_NUMBER);
                    }
                        else {
                        txtPartMeasurement.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
                    }

                    txtPartMeasurement.setTextSize(14);

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                        txtPartMeasurement.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);
                    }
                    txtPartMeasurement.setEnabled(true);

                    // Set all the input attributes for the labels of what needs to be entered.
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                        lblName.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
                    }
                    lblName.setBackgroundColor(getResources().getColor(R.color.colorPartMeasurements));
                    lblName.setFocusable(true);
                    lblName.setText(line);
                    lblName.setTextSize(14);

                    // Add the labels and text boxes to the grid.
                    tblRow.addView(lblName);
                    tblRow.addView(txtPartMeasurement);

                    // Get the next line in the file if there one.
                    line = reader.readLine();
                }
            };

        }
        catch (IOException e) {
            //Used for debugging --------------------------------------------
            //System.out.println("In the catch of the On Catch in PartDetail  --  " + btnName);
            // ----------------------------------------------------------
            e.printStackTrace();
        }
    }

    @Override
    public void onClick(View v) {

    }
}

Notice I set TYPE_CLASS_NUMBER of the lbl for that EditText is QTY, else I want it to boe TYPE_NUMBER_FLAG_DECIMAL.

But this doesn't seem to be working. I've tried it on my emulator, and my real phone. No go. Please let me know what I'm doing wrong. Thanks.

Here's the xml. Remember, I create most of the objects on the fly.

  <?xml version="1.0" encoding="utf-8"?>
     <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~ Copyright (c) 2016. Unless otherwise noted, all my code is open source
-->

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
          android:layout_width = "match_parent"
          android:layout_height = "match_parent" >

<TextView
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "New Text"
    android:id = "@+id/txtBtnPushed"
    android:textSize = "42sp"
    android:layout_alignParentTop = "true"
    android:layout_centerHorizontal = "true" />

<ImageView
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:id = "@+id/imgPartPicked"
    android:layout_below = "@+id/txtBtnPushed"
    android:layout_centerHorizontal = "true"
    android:src = "@mipmap/straight_tap"
    android:minWidth = "150dp"
    android:minHeight = "150dp" />
<ScrollView
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:layout_below = "@+id/imgPartPicked"
    android:layout_alignParentLeft = "true"
    android:layout_alignParentStart = "true">

    <TableLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:stretchColumns="*"
        android:id = "@+id/tblLayoutContent">
    </TableLayout >

</ScrollView >
</RelativeLayout >

Upvotes: 1

Views: 2670

Answers (2)

vbneil54
vbneil54

Reputation: 103

Okay, I kind of worked out a solution. Here is the part I changed. I decided not to wrap the set input in an if statement. Now it works, but all the edit texts accept decimal. I'll have to figure out how to limit the Qty box to only numbers, but for now my work around will have to do.

                txtPartMeasurement.setInputType(InputType.TYPE_CLASS_NUMBER |
                        InputType.TYPE_NUMBER_FLAG_DECIMAL);


                // Set all the input attributes for the text boxes.
               /** if (line == "QTY") {
                    txtPartMeasurement.setRawInputType(InputType.TYPE_CLASS_NUMBER |
                            InputType.TYPE_NUMBER_FLAG_DECIMAL);
                }
                    else {
                    txtPartMeasurement.setRawInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
                } */
                txtPartMeasurement.setTextSize(14);

Upvotes: 0

Tony
Tony

Reputation: 2748

write android:inputType="number" in your xml attribute or android:inputType="numberDecimal"

android:inputType="number" only accept int number, android:inputType="numberDecimal" accept decimal number.

You may refer this.

Upvotes: 2

Related Questions