Предотвратить расширение EditText

У меня есть следующий файл макета

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res/com.company" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#CCCCCC"
        android:orientation="horizontal" 
        android:id="@+id/main">

        <com.company.DrawView
            android:id="@+id/draw_view" 
            android:layout_width="900dp"
            android:layout_height="500dp"
            android:layout_alignParentLeft="true"
            android:background="#CCCC00" />

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/draw_view"
            android:orientation="horizontal">
        <Button
            android:id="@+id/btn1"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textSize="10dp"
            android:clickable="true"
            android:onClick="buttonClicked"
            android:text="button" />

        <EditText 
            android:id="@+id/text1"
            android:textSize="5dp"
            android:inputType="text"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.0"
            android:maxWidth="5dp"
            android:visibility="invisible"
            android:gravity="bottom"
            />
        </LinearLayout>
    </RelativeLayout>

Всякий раз, когда я устанавливаю фокус на EditText, он расширяется и заполняет верхнюю половину экрана, а программная клавиатура заполняет нижнюю половину экрана. Что мне делать, чтобы сохранить размер EditText и показать программную клавиатуру?

Цель состоит в том, чтобы зафиксировать нажатия клавиш (на программной клавиатуре) пользователя и использовать их в другой части приложения.

Редактировать 1: я использую SDK версии 15 и Macbook, если это поможет. Добавление файла манифеста.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="15" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ChalkrText"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustNothing" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

person Srisa    schedule 28.12.2011    source источник


Ответы (3)


// в вашем файле manifest.xml напишите приведенный ниже код в своей деятельности

android:windowSoftInputMode="adjustNothing" 
person Padma Kumar    schedule 28.12.2011
comment
попробуйте это stackoverflow.com/questions/7940765/ - person Padma Kumar; 28.12.2011
comment
Не знаю, как это поможет. Я хочу, чтобы клавиатура была видна, но EditText не должен расширяться. - person Srisa; 28.12.2011
comment
это AdjustNothing будет работать, если вы не используете прокрутку. можете ли вы поделиться своим кодом манифеста для этого действия, где вы написали этот android:windowSoftInputMode. - person Padma Kumar; 28.12.2011
comment
Ru делает это для планшета. почему вы жестко закодировали этот com.company.DrawView android:layout_width=900dp, android:layout_height=500dp. Я запутался в этом DrawView!!?. - person Padma Kumar; 28.12.2011
comment
adjustNothing недокументирован и поэтому может не существовать для всех прошлых и будущих версий Android. - person CommonsWare; 24.04.2012

Это стандартное поведение для EditText в альбомной ориентации устройства. Вы не можете изменить это.

person Jin35    schedule 28.12.2011
comment
Любая ссылка? Что еще более важно, есть ли другой способ достичь того, чего я хочу достичь? - person Srisa; 28.12.2011

Я нашел обходной путь, показывая мягкую клавиатуру при нажатии кнопки и переопределяя dispatchKeyEvent в действии для захвата нажатий клавиш. Мне не нужен был EditText и не требовалось показывать мягкую клавиатуру.

Это, чтобы показать мягкую клавиатуру:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

Это dispatchKeyEvent:

public boolean dispatchKeyEvent(KeyEvent event) {
/**
 * ACTION_MULTIPLE is for keys with special characters like &copy;
 * British Pound sign etc. These keys do not generate the ACTION_DOWN
 * or ACTION_UP events.
 * 
 * Only the ACTION_DOWN is handled. ACTION_UP is ignored to avoid
 * duplication of the letters that the user wants to type.
 */
if (event.getAction() == KeyEvent.ACTION_DOWN ||
    event.getAction() == KeyEvent.ACTION_MULTIPLE) {

    DrawView dview = (DrawView) findViewById(R.id.draw_view);
        Log.v(LOG_TAG, "c = " + event.getKeyCode() + 
                    ", l = " + event.getDisplayLabel() + 
                    ", u = " + event.getUnicodeChar() +
                    ", uc = " + (char)event.getUnicodeChar() + 
                    ", chars = " + event.getCharacters()
            );
        dview.addText(event);
}
return true;
}

Это метод addText, в котором обрабатывается соответствующее событие:

public void addText(KeyEvent event) {
    int unicode = event.getUnicodeChar();
    int keycode = event.getKeyCode();
    String characters = event.getCharacters();

    if (unicode == 0) {
        switch (keycode) {
        case 0:
            if (characters != null) {
                text += characters;
            }
            break;
        case KeyEvent.KEYCODE_DEL:
            text = text.substring(0, text.length()-1);
            break;
        case KeyEvent.KEYCODE_SHIFT_LEFT:
        case KeyEvent.KEYCODE_SHIFT_RIGHT:
            // ignore, nothing to do
            break;
        }
    }
    else {
        text = text + (char)unicode;
    }

    invalidate();
}

Вот сообщения, которые направили меня в правильном направлении: Как Захватить ввод с мягкой клавиатуры в представлении? Могу ли я использовать программную клавиатуру без EditText?

person Srisa    schedule 03.01.2012