Я разрабатываю приложение в Eclipse с идентификатором сборки 20090920-1017, используя Android SDK 2.2 и тестируя Google Nexus One. Для целей приведенных ниже тестов я использую IME «Клавиатура Android» на нерутированном телефоне.
У меня есть виджет EditText, который ведет себя очень странно. Я могу ввести текст, а затем нажать клавишу «del», чтобы удалить этот текст; но после того, как я ввожу символ «пробел», клавиша «del» больше не будет удалять символы перед этим символом пробела.
Пример говорит тысячу слов, так что рассмотрите следующие два невероятно простых приложения...
Пример 1: EditText в виджете LinearLayout:
package com.example.linear.edit;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.LinearLayout;
public class LinearEdit extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.MATCH_PARENT, Gallery.LayoutParams.MATCH_PARENT));
EditText edit = new EditText(getApplicationContext());
layout.addView(edit, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
setContentView(layout);
}
}
Запустите указанное выше приложение, введите текст «редактировать пример», затем несколько раз нажмите клавишу «del», пока не будет удалено все предложение. Все работает нормально.
Теперь рассмотрим пример 2: EditText в виджете галереи:
package com.example.gallery.edit;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.LinearLayout;
public class GalleryEdit extends Activity
{
private final String[] galleryData = {"string1", "string2", "string3"};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Gallery gallery = new Gallery(getApplicationContext());
gallery.setAdapter(new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, galleryData)
{
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.MATCH_PARENT, Gallery.LayoutParams.MATCH_PARENT));
EditText edit = new EditText(getApplicationContext());
layout.addView(edit, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
return layout;
}
});
setContentView(gallery);
}
}
Запустите указанное выше приложение, введите текст «edit example», затем несколько раз нажмите клавишу «del». Если у вас возникла та же проблема, что и у меня, вы обнаружите, что не можете удалить дальше символ «пробел». Все не так хорошо.
Если кто-то может пролить свет на этот вопрос, я был бы очень признателен.
С уважением