setOnKeyListener在galaxy s2上没有像在模拟器上那样表现出相同的行为

时间:2012-01-05 02:28:34

标签: android android-emulator

我已经搜索过这个问题的解决方案而没有任何问题。

我有一个简单的Android应用程序,用户在一个editText(@ + id / incBox)字段中输入一个数字,该数字的给定百分比会自动放入另一个editText(@ + id / excBox)。

我为两个editText字段实现了一个setOnKeyListener,它获取输入的数字并进行计算以更新另一个字段(反之亦然)。

每次输入数字时,此代码在模拟器中工作正常,其他editText字段将更新。但是,在我的三星galaxy s2上运行apk时,其他字段不会更新。要在手机上更新的其他字段,请在软键盘上按Enter键。我在这里错过了什么?我甚至删除了event.getAction()== KeyEvent.ACTION_UP“if”子句,以确保没有CANCEL或MULTITOUCH事件影响OnKey侦听器。我如何通过电话开始工作?

我遇到的另一个问题是在将值输入字段后。移动到另一个字段并删除或按Enter是相当滞后的。按下退格按钮删除已填充字段中的数字时,有时会有0.5秒的延迟。这是因为try catch吗?

任何帮助都将不胜感激。

这是main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="top"
    android:background="@drawable/bground"
>

    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="@string/inclusive"
    android:textSize="20px"
    android:paddingTop="10px"
    android:textStyle="bold" />


    <EditText
    android:id="@+id/incBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal" 
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="25px"
    android:layout_marginRight="25px"
    android:singleLine="true"
    >
    <requestFocus />
    </EditText>


    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="20px"
    android:textStyle="bold"
    android:gravity="center_horizontal"
    android:text="@string/exclusive" />

    <EditText
    android:id="@+id/excBox"
    android:layout_width="fill_parent"
    android:layout_height="60px"
    android:inputType="numberDecimal" 
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="25px"
    android:layout_marginRight="25px"
    android:singleLine="true"
    >
    </EditText>
</LinearLayout>

这是activity.java

public class PercentageCalculatorActivity extends Activity
{

private EditText inclusive;
private EditText exclusive;
DecimalFormat cost = new DecimalFormat("0.00");

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    // Set Activity Layout
    setContentView(R.layout.main);

    // Get the EditText and Button References
    inclusive = (EditText)findViewById(R.id.incBox);
    exclusive = (EditText)findViewById(R.id.excBox);

    //Set KeyListener to ourself
    inclusive.setOnKeyListener(new OnKeyListener() 
    { 
 public boolean onKey(View v, int keyCode, KeyEvent event) 
      { 
        try
        {

         double num = Double.parseDouble( inclusive.getText().toString() );

        if ( num > 0)
        {                           
          num = num * 0.25;
        String exc = cost.format(num).toString();
        exclusive.setText(exc);
            }

    // Close the keyboard on enter press                                    if ( keyCode == 66  )                           {
    InputMethodManager imm = (InputMethodManager)getSystemService    (Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(inclusive.getWindowToken(), 0);
    }

            return false;
            }
            catch (Throwable e)
                {
                // set other field to empty if this field is also blank
    exclusive.setText("");
                        return false;
                }            
        }
    });

   exclusive.setOnKeyListener(new OnKeyListener() 
    { 
        public boolean onKey(View v, int keyCode, KeyEvent event) 
        { 
            if(event.getAction()==KeyEvent.ACTION_UP ) 
            { 
                try
                {
                    double num = Double.parseDouble( exclusive.getText().toString() );

                    if ( num > 0)
                    {
                        num = num * 4;
                        String exc = cost.format(num).toString();
                        inclusive.setText(exc);
                    }

                    if ( keyCode == 66  )
                    {
                        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(exclusive.getWindowToken(), 0);
                    }                   

            return false;
                }
                catch (Throwable e)
                {
                    // set other field to empty if this field is also blank 
                                inclusive.setText("");
                    return false;
                }

            }
            else
            {
                return false;
            }

        }
    });

1 个答案:

答案 0 :(得分:1)

它实际上不取决于设备,而是取决于您选择的键盘。我以前碰到过这个。如果您将键盘更换为另一个键盘,您会发现它突然开始按预期反应。我不确定这是什么原因,但你应该尝试一下,看看是否能解决你的问题。