Intereting Posts
Android, Лучший способ предоставить конкретные приложения в библиотечном проекте? Как я могу использовать код BitmapRegionDecoder в android 2.2.2 (Froyo)? Гибридные мобильные приложения, как правило, считаются уступающими по отношению к собственным приложениям разработчиками в технологической отрасли? Получите контактное имя с указанием номера телефона в Android Комплект разработчика BTLE (Bluetooth Low energy) – должен иметь профиль близости Исключение класса Visualizer для Windows Visualizer Прокрутка поведения в вложенном RecyclerView с горизонтальной прокруткой Android Lint: игнорировать библиотечные проекты Медленное приложение с фоновым изображением Android ExpandableListActivity и SimpleCursorTreeAdapter? Андроидное шоу с всплывающим окном любого приложения Индивидуальный уровень трафика для Google Maps Ошибки, управляющие жизненным циклом UnityPlayer в собственном приложении для Android DownloadManager.Request.setNotificationVisibility не работает с jSecurityException: недопустимое значение для видимости: 2 Питание для устройств, на которых работает Jelly bean, а также версии позже Jelly bean при использовании данных приложений

Получить входной текст с пользовательским видом без edittext android

Я создал customview. Всякий раз, когда пользователь дважды нажимает на представление, он должен отображать клавиатуру, и пользователь может нарисовать новый текст.

Держатель – это пользовательский вид, который расширяет представление. Но он показывает клавиатуру. Как получить текст?

public Holder(Context context, AttributeSet attrs) { super(context, attrs); Log.e(TAG,"EXE"); imm = (InputMethodManager) context. getSystemService(Context.INPUT_METHOD_SERVICE); public boolean onDoubleTap(MotionEvent e) { View view = Holder.this.getRootView(); imm.showSoftInput(view, InputMethodManager.SHOW_FORCED); // imm.showSoftInput(Holder.this, InputMethodManager.SHOW_FORCED); not working 

Solutions Collecting From Web of "Получить входной текст с пользовательским видом без edittext android"

Попробуйте создать edittext динамически и отправьте значение для просмотра. Вот моя лучшая альтернатива code.its.

 public class CustomEditText extends EditText { private KeyImeChange keyImeChangeListener; public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public CustomEditText(Context context) { super(context); } public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); } public void setKeyImeChangeListener(KeyImeChange listener){ keyImeChangeListener = listener; } public interface KeyImeChange { public void onKeyIme(int keyCode, KeyEvent event); } @Override public boolean onKeyPreIme (int keyCode, KeyEvent event){ if(keyImeChangeListener != null){ keyImeChangeListener.onKeyIme(keyCode, event); } return false; } 

}

  MainActivity.editText2.setKeyImeChangeListener(new CustomEditText.KeyImeChange() { @Override public void onKeyIme(int keyCode, KeyEvent event) { //Update view on keyboard close invalidate(); } }); 

Вот пользовательский FrameLayout который, когда вы нажимаете на него, показывает soft-keyboard и вы можете вводить любую вещь, и когда вы нажимаете кнопку ввода, она показывает текст тоста с тем, что вы набрали, я надеюсь, что это даст вам идею:

 public class MyCustomFrameLayout extends FrameLayout { String mText; public MyCustomFrameLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public MyCustomFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyCustomFrameLayout(Context context) { super(context); init(); } @Override public boolean onCheckIsTextEditor() { return true; } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { BaseInputConnection fic = new BaseInputConnection(this, false); outAttrs.actionLabel = null; outAttrs.inputType = InputType.TYPE_NULL; outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE; return fic; } public void init(){ setFocusable(true); setFocusableInTouchMode(true); mText =""; setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if((keyCode >= KeyEvent.KEYCODE_A) && (keyCode <= KeyEvent.KEYCODE_Z)) { mText = mText + (char) event.getUnicodeChar(); return true; } else if(keyCode >= KeyEvent.KEYCODE_ENTER){ Toast.makeText(getContext(), "The text is: " + mText , Toast.LENGTH_LONG).show(); return true; } } return false; } }); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); if (event.getAction() == MotionEvent.ACTION_DOWN) { InputMethodManager imm = (InputMethodManager) getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(this, InputMethodManager.SHOW_FORCED); } return true; } public String getText(){ return mText; } } 

@Asthme: После проверки ссылки на способ ввода мягкой клавиатуры в режиме просмотра? , Чтобы сделать View editable вам также необходимо сделать настраиваемый BaseInputConnection, чтобы сделать View редактируемым.

И возможное решение для кода дается по ссылке ниже, в которую входит Dianne Hackborne (Android Framework Engineer).

https://groups.google.com/forum/#!topic/android-developers/N0ITpZZ16Bw

Пройдите до последней части этой ссылки, и вы найдете пользовательский BaseInputConnection, чтобы сделать View доступным для редактирования.

Я отправляю соответствующий код и скриншоты для примера кода:

 class MyInputConnection extends BaseInputConnection { private SpannableStringBuilder myeditable; Holder mycustomview; public MyInputConnection(View targetView, boolean fullEditor) { super(targetView, fullEditor); mycustomview = (Holder) targetView; } public Editable getEditable() { if (myeditable == null) { myeditable = (SpannableStringBuilder) Editable.Factory.getInstance() .newEditable("Placeholder"); } return myeditable; } public boolean commitText(CharSequence text, int newCursorPosition) { invalidate(); myeditable.append(text); mycustomview.setText(text); return true; } } 

Поскольку это пользовательское представление, нам необходимо обеспечить реализацию setText.

  public void setText(CharSequence text) { mText = text; requestLayout(); invalidate(); } 

Ниже приведен полный код пользовательского представления, это отличается от вашей реализации (я оставляю Gesture * API Unimplemented)

  package com.example.soappdemo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.text.Editable; import android.text.InputType; import android.text.SpannableStringBuilder; import android.util.AttributeSet; import android.util.Log; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; public class Holder extends View implements GestureDetector.OnDoubleTapListener { InputMethodManager imm; private Paint paint; private static final String TAG="Holder"; private CharSequence mText="original"; public Holder(Context context, AttributeSet attrs) { super(context, attrs); init(); //requestFocus(); setFocusableInTouchMode(true); setFocusable(true); requestFocus(); setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { Log.d(TAG, "onKeyListener"); if (event.getAction() == KeyEvent.ACTION_DOWN) { // Perform action on key press Log.d(TAG, "ACTION_DOWN"); return true; } return false; } }); } public void init(){ paint = new Paint(); paint.setTextSize(12); paint.setColor(0xFF668800); paint.setStyle(Paint.Style.FILL); } @Override protected void onDraw(Canvas canvas) { canvas.drawText(mText.toString(), 100, 100, paint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { this.setMeasuredDimension(150,200); } public void setText(CharSequence text) { mText = text; requestLayout(); invalidate(); } public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); Log.d(TAG, "onTOUCH"); if (event.getAction() == MotionEvent.ACTION_UP) { // show the keyboard so we can enter text InputMethodManager imm = (InputMethodManager) getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(this,0); } return true; } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { Log.d(TAG, "onCreateInputConnection"); outAttrs.actionLabel = null; outAttrs.label="TEST TEXT"; outAttrs.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE; return new MyInputConnection(this,true); } @Override public boolean onCheckIsTextEditor() { Log.d(TAG, "onCheckIsTextEditor"); return true; } @Override public boolean onDoubleTap(MotionEvent e) { // TODO Auto-generated method stub View view = Holder.this.getRootView(); imm.showSoftInput(view, InputMethodManager.SHOW_FORCED); return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { // TODO Auto-generated method stub return false; } class MyInputConnection extends BaseInputConnection { private SpannableStringBuilder myeditable; Holder mycustomview; public MyInputConnection(View targetView, boolean fullEditor) { super(targetView, fullEditor); mycustomview = (Holder) targetView; } public Editable getEditable() { if (myeditable == null) { myeditable = (SpannableStringBuilder) Editable.Factory.getInstance() .newEditable("Placeholder"); } return myeditable; } public boolean commitText(CharSequence text, int newCursorPosition) { invalidate(); myeditable.append(text); mycustomview.setText(text); return true; } } } 

Прикрепленный экран. Pic-1 до касания, UI – некоторый текст. Pic-2 – это когда пользовательский вид коснулся и текст получен с мягкой клавиатуры. ! [Pic-1, с исходным текстом в пользовательском представлении] [1]

 ![Pic-2 when custom view is tapped][2] [1]: http://i.stack.imgur.com/rLYmR.png [2]: http://i.stack.imgur.com/gTnYY.png 

Проверьте эту ссылку o попробуйте это, она может работать:

 imm.showSoftInput(view,0); 

попробуй это

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mSearchEditText.requestFocus(); imm.showSoftInput(mSearchEditText, InputMethodManager.SHOW_IMPLICIT); 

Вы можете переопределить onKeyUp(int keyCode, KeyEvent event) в своей деятельности, а затем отправить ключевую информацию ( keyCode и / или event ) в свое представление. Удостоверьтесь, что у вас есть подходящий настраиваемый метод обработки кодов клавиш / событий в вашем представлении (здесь вызывается handleKeyEvent ).

 @Override public boolean onKeyUp(int keyCode, KeyEvent event) { yourCustomView.handleKeyEvent(keyCode, event); } 

Источник: https://groups.google.com/forum/#!topic/android-developers/0tQSZufLZTg

Попробуй это….

 view.requestFocus(); view.setFocusableInTouchMode(true); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(InputEditText, InputMethodManager.SHOW_FORCED); 

Также проверьте это

Как показать мягкую клавиатуру, когда edittext сфокусирован

Используйте текстовое окно. Seteditable (true) в текстовом виде заставляет его вести себя как edittext. Поэтому переключайтесь между seteditable (true) и seteditable (false) относительно того, когда вы хотите редактировать и когда хотите читать