Я искал решение этой проблемы без удачи.
У меня есть приложение simpe android, в котором пользователь вводит число в одно поле editText (@ + id / incBox), и определенный процент этого числа автоматически помещается в другой текст editText (@ + id / excBox).
Я реализовал setOnKeyListener для обоих полей editText, который получает введенное число и выполняет вычисления для обновления другого поля (наоборот).
Этот код работает в эмуляторе каждый раз, когда вводится цифра, обновляется другое поле editText. Однако при запуске apk на моем Samsung Galaxy S2 другое поле не обновляется. Чтобы обновить другое поле на телефоне , нажмите клавишу Enter на программной клавиатуре. Что мне здесь не хватает? Я даже удалил event.getAction () == KeyEvent.ACTION_UP «if», чтобы убедиться, что никакие события CANCEL или MULTITOUCH не влияют на слушателя OnKey. Как мне добраться до этого, чтобы работать на телефоне?
Другая проблема, с которой я сталкиваюсь, заключается в том, что после ввода значения в поле. Перемещение в другое поле и удаление или нажатие клавиши ввода довольно запаздывает. Иногда при нажатии кнопки возврата назад происходит задержка в 0,5 секунды, чтобы удалить цифру в уже заполненном поле. Это из-за попытки поймать?
Любая помощь будет оценена.
это 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>
а вот и активность.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;
}
}
});