马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Android小程序-随机数生成器(3) 添加更多的功能 由于现在输入框只能输入数字,所以我添加了一个改变符号的功能,这样就可以获取从负到正的随机数了。 <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:textSize="30sp" android:text="@string/button1" /> 在布局文件中添加一个按钮。 final View rootView = this.getWindow().getDecorView();//获取当前焦点的位置 //设置改变符号按钮点击事件 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { focusId = findViewById(rootView.findFocus().getId()); String X = focusId.getText().toString(); if(TextUtils.i SEMpty(X)){ String x = String.valueOf( - Integer.parseInt(X)); focusId.setText(x); focusId.setSelection(x.length());//将光标移至文字末尾 } } }); 在主活动中添加这个按钮的点击事件-字符串转整,取反,整转字符串。 修复现有和潜在的bug,完善程序的功能 用TextUtils.isEmpty(N)来判断字符串N是否为空是不够的,因为添加了改变符号功能后,是可以把输入框的内容删剩一个负号的,这时再点击开始计算或者改变符号按钮,就会闪退。所以我想到了一个很简单有效的方法来解决这个问题。 //判断是否可以将字符串转化为整型数 public static boolean isStrNum(String str) { try { Integer.parseInt(str); return true; } catch (NumberFormatException ignored) { return false; } } 尝试转化,如果可以,就返回true,不可以,就返回false。够简单吧?用这个函数来代替所有的TextUtils.isEmpty(),就完美地解决了这个问题。 目前,我是不限制输入框输入的内容长度的,所以现在限制一下。 private final static int n = 8;//这个值用来限制editText的最大长度 ...... editText1.setFilters(new InputFilter[]{new InputFilter.LengthFilter(n)}); editText2.setFilters(new InputFilter[]{new InputFilter.LengthFilter(n)}); (新手请注意上面三行代码添加的位置) 在添加了限制之后,问题又出现了。当输入了8个数字之后,再点击改变符号按钮,多一个负号,字符串的长度就+1,于是把这串非法的字符设置到editText的时候,就闪退了。于是, //设置改变符号按钮点击事件 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { focusId = findViewById(rootView.findFocus().getId()); String X = focusId.getText().toString(); if(isStrNum(X)){ String x = String.valueOf( - Integer.parseInt(X)); if(Integer.parseInt(X) > 0){ focusId.setFilters(new InputFilter[]{new InputFilter.LengthFilter(n + 1)}); } focusId.setText(x); focusId.setSelection(x.length());//将光标移至文字末尾 if(Integer.parseInt(X) < 0){ focusId.setFilters(new InputFilter[]{new InputFilter.LengthFilter(n)}); } } } } }); 在正变负前,editText长度+1,在负变正后,editText长度-1。 某些手机在打开软件进入活动时,是不会自动获取焦点的,这时我们是获取不到focusId的。这会导致找不到对象,然后闪退。于是, //设置改变符号按钮点击事件 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(rootView.hasFocus()) { focusId = findViewById(rootView.findFocus().getId()); String X = focusId.getText().toString(); if(isStrNum(X)){ String x = String.valueOf( - Integer.parseInt(X)); if(Integer.parseInt(X) > 0){ focusId.setFilters(new InputFilter[]{new InputFilter.LengthFilter(n + 1)}); } focusId.setText(x); focusId.setSelection(x.length());//将光标移至文字末尾 if(Integer.parseInt(X) < 0){ focusId.setFilters(new InputFilter[]{new InputFilter.LengthFilter(n)}); } } } } }); 添加判断逻辑:rootView.hasFocus(),如果有焦点才执行下面的代码。 目前,这个程序是可以横屏的,要限制屏幕切换。 android:screenOrientation="portrait" 在AndroidManifest.xml文件中,在MainActivity注册内容里添加如上代码。
|