我已经搜索过这个问题的解决方案而没有任何问题。
我有一个简单的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;
}
}
});
答案 0 :(得分:1)
它实际上不取决于设备,而是取决于您选择的键盘。我以前碰到过这个。如果您将键盘更换为另一个键盘,您会发现它突然开始按预期反应。我不确定这是什么原因,但你应该尝试一下,看看是否能解决你的问题。