站长论坛 - 站长交流社区- SEO交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 156|回复: 0

[XML] Android小程序-随机数生成器(3)

[复制链接]
发表于 2019-8-12 09:48:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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.iSEMpty(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注册内容里添加如上代码。
更多android编程知识敬请关注广东纳讯网络技术有限公司

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易采站长站 ( 蒙ICP备14002389-1号 ) |

GMT+8, 2019-12-14 16:58

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表