Reputation: 103
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
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