java - 当软键盘处于 Activity 状态时,设置文本不起作用

标签 java android keyboard sleep

我正在编写一个 android 应用程序,它在几分之一秒内显示一串数字。然后,用户会在文本字段中输入这些数字,以查看他们能够在该 Flash 中读取多少。但是,当键盘打开时,按下触发按钮时不会出现数字串。为什么会这样,我该如何解决?

这是Java代码:

package com.example.test;

import java.util.*;
import android.os.Bundle;
import android.os.Handler;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.app.Activity;
import android.view.*;
import android.widget.*;

public class MainActivity extends Activity {

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

    public void ButtonOnClick(View v){
        Random rand = new Random();

        final Handler mHandler = new Handler();

        String number = new String();
        for(int i=0; i < 9; i++){
            int num = rand.nextInt(9);
            number = number + Integer.toString(num);
        }

        final TextView mTextView = (TextView) findViewById(R.id.textview1);
        mTextView.setText(number);

        final Runnable makeTextDisapear = new Runnable() {
            public void run() {
                mTextView.setText(null);

                }
            };

            mHandler.postDelayed(makeTextDisapear , 1);

    }

}

编辑:我已经通过在应用程序本身制作一个屏幕键盘来解决这个问题,但我更愿意使用系统键盘,所以我仍然对答案感兴趣。

最佳答案

首先:请注意 you will only get digits from 0-8 (not a 9)使用您的代码时。

我已经为您构建了一些示例代码并对其进行了测试。这会运行并执行您描述的操作。它会在适当的时候隐藏键盘,并且仅在单击 EditText 时才显示。它不会分散查看数字的注意力。我希望这可以帮助你。请尝试代码。

MainActivity.java:

package com.example.exampleshowdigits;

import java.util.Random;

import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;

public class MainActivity extends Activity implements OnClickListener {

    private Button mButton;
    private TextView mTextView1;
    private TextView mTextView2;
    private EditText mEditText;
    private boolean numbersShown;
    private int[] numbers;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button)findViewById(R.id.button1);
        mTextView1 = (TextView)findViewById(R.id.textview1);
        mTextView2 = (TextView)findViewById(R.id.textview2);
        mEditText = (EditText)findViewById(R.id.edittext1);
        mButton.setOnClickListener(this);
        InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.showSoftInput(mEditText, 0);
        numbersShown = false;
        numbers = new int[9];
    }

    @Override
    public void onClick(View v) {
        if(!numbersShown) {
            Random rand = new Random();
            String number = "";
            for(int i = 0; i < 9; i ++) {
                int num = rand.nextInt(10); //assuming you want 0-9
                numbers[i] = num;
                number += Integer.toString(num); //same as number = number + Integer.toString(num);
            }
            mTextView1.setText(number);
            SystemClock.sleep(500);
            final Runnable makeTextDisapear = new Runnable() {
                public void run() {
                    mTextView1.setText("");
                    mButton.setText(getString(R.string.checkresult));
                    mTextView2.setText(getString(R.string.whatdidyousee));
                    mEditText.setText("");
                    numbersShown = true;
                }
            };
            Handler mHandler = new Handler();
            mHandler.postDelayed(makeTextDisapear, 1000);
        }
        else {
            mButton.setText(getString(R.string.shownumbers));
            numbersShown = false;
            int correct = 0;
            String numbersEntered = mEditText.getText().toString();
            for(int i = 0; i < numbersEntered.length(); i++) {
                int num = Character.getNumericValue(numbersEntered.charAt(i));
                if(num == numbers[i]) {
                    correct++;
                }
            }
            mTextView2.setText(correct + " " + getString(R.string.correct));
        }
    }
}

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/shownumbers"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp" />
    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:layout_below="@id/button1" />
    <TextView
        android:id="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginTop="15dp"
        android:layout_below="@id/textview1" />
    <EditText
        android:id="@+id/edittext1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:maxLength="9"
        android:singleLine="true"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:layout_below="@id/textview2" />
</RelativeLayout>

strings.xml:

<string name="shownumbers">Show numbers</string>
<string name="checkresult">Check result</string>
<string name="whatdidyousee">What did you see? Enter here:</string>
<string name="correct">out of 9 correct!</string>

关于java - 当软键盘处于 Activity 状态时,设置文本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004627/

相关文章:

java - 如何多线程更新由sql代码更新的数据库?

java - JLabel 可以有 img 标签吗

java - 如何删除 JGraphX 库中的顶点?

java - Android boolean 偏好问题

android - 监视 Android 服务中的文件夹

ios - 如何在 Swift 中的小数位上添加返回键?

Android:如何防止软键盘将我的 View 向上推?

iphone - 在正确的时间显示键盘 iOS7

java - java源码中的Maven groupId和包名

Android 平板电脑 - 在输入字段中使用 Tab 键在 iframe 中的表单中不起作用