android - verbinden - tecknet x366 anleitung deutsch




So zeigen Sie die Tastatur an, wenn der Bearbeitungstext fokussiert ist (20)

Alle oben angegebenen Lösungen ( die Interaktion InputMethodManager in dem OnFocusChangeListener.onFocusChange- Listener, der an den EditText angehängt ist, funktionieren einwandfrei, wenn Sie eine einzelne Bearbeitung in der Aktivität durchführen.

In meinem Fall habe ich zwei Änderungen.

 private EditText tvX, tvY;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 tvX.setOnFocusChangeListener(this);
    tvY.setOnFocusChangeListener(this);

@Override
public void onFocusChange(View v, boolean hasFocus) {       
    InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if(tvX.hasFocus() || tvY.hasFocus()) {            
        imm.showSoftInput(v, 0);            
    } else {
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);         
    }       
};

Ich habe beobachtet, dass onFocusChange für tvX mit hasFocus = true (Tastatur angezeigt) aber dann für tvY mit hasFocus = true (Tastatur versteckt) ausgelöst wird. Am Ende war keine Tastatur sichtbar.

Allgemeine Lösung sollte eine korrekte Anweisung haben, wenn "Tastatur anzeigen, wenn EditText-Text den Fokus hat"

Ich möchte die Soft-Tastatur automatisch EditText wenn ein EditText fokussiert ist (wenn das Gerät keine physische Tastatur hat) und ich habe zwei Probleme:

  1. Wenn meine Activity angezeigt wird, ist mein EditText fokussiert, aber die Tastatur wird nicht angezeigt. Ich muss erneut darauf klicken, um die Tastatur anzuzeigen (sie sollte angezeigt werden, wenn meine Activity angezeigt wird).

  2. Und wenn ich auf die Tastatur klicke, wird die Tastatur abgelehnt, aber der EditText bleibt fokussiert und ich will nicht (weil meine Bearbeitung fertig ist).

Um fortzufahren, ist mein Problem, etwas mehr wie auf dem iPhone zu haben: welche die Tastatur mit meinem EditText Status EditText (fokussiert / nicht fokussiert) und natürlich keine Soft-Tastatur, wenn es eine physische Tastatur gibt.


Code-Auszug . . .

public void hideKeyboard(Context activityContext){

    InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    //android.R.id.content ( http://.com/a/12887919/2077479 )
    View rootView = ((Activity) activityContext)
            .findViewById(android.R.id.content).getRootView();

    imm.hideSoftInputFromWindow(rootView.getWindowToken(), 0);
}

public void showKeyboard(Context activityContext, final EditText editText){

    final InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    if (!editText.hasFocus()) {
        editText.requestFocus();
    }

    editText.post(new Runnable() {
        @Override
        public void run() {
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
        }
    });
}

Es hat für mich funktioniert. Sie können damit auch versuchen, die Tastatur zu zeigen:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Fügen Sie einfach android: windowSoftInputMode = "stateHidden" in der Manifestdatei hinzu ...


Glauben oder nicht, mein Problem mit der Soft-Tastatur wurde gelöst, als ich entdeckte, dass die Animationen Animationen die Soft-Tastatur deaktivieren können. Wenn Sie die Absicht mit dem aufrufen

i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

und

overridePendingTransition(0, 0);

Es kann die Soft-Tastatur verbergen und es gibt keine Möglichkeit, sie anzuzeigen.


Ich bin einverstanden mit Raukodraug dafür in einem swithview verwenden müssen Sie Fokus wie folgt anfordern / löschen:

    final ViewSwitcher viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
    final View btn = viewSwitcher.findViewById(R.id.address_btn);
    final View title = viewSwitcher.findViewById(R.id.address_value);

    title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            viewSwitcher.showPrevious();
            btn.requestFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(btn, InputMethodManager.SHOW_IMPLICIT);
        }
    });

    // EditText affiche le titre evenement click
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            btn.clearFocus();
            viewSwitcher.showNext();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(btn.getWindowToken(), 0);
            // Enregistre l'adresse.
            addAddress(view);
        }
    });

Grüße.


Ich habe alles hier kombiniert und für mich funktioniert es:

public static void showKeyboardWithFocus(View v, Activity a) {
    try {
        v.requestFocus();
        InputMethodManager imm = (InputMethodManager) a.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
        a.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Ich habe diese Hilfsklasse gemacht. Übergeben Sie einfach den Kontext und die Ansicht, die Sie fokussieren möchten, und zeigen Sie die Tastatur und danach die Tastatur an. Ich hoffe, es hilft.

public class FocusKeyboardHelper {

private View view;
private Context context;
private InputMethodManager imm;

public FocusKeyboardHelper(Context context, View view){
    this.view = view;
    this.context = context;
    imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
}

public void focusAndShowKeyboard(){

    view.requestFocus();
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

}

public void hideKeyBoard(){
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

}


Ich hatte das gleiche Problem in verschiedenen Situationen, und die Lösungen, die ich gefunden habe, funktionieren in einigen, aber arbeiten nicht in anderen, also hier ist eine Mähdrescherlösung, die in den meisten Situationen funktioniert, die ich gefunden habe:

public static void showVirtualKeyboard(Context context, final View view) {
    if (context != null) {
        final InputMethodManager imm =  (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        view.clearFocus();

        if(view.isShown()) {
            imm.showSoftInput(view, 0);
            view.requestFocus();
        } else {
            view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                @Override
                public void onViewAttachedToWindow(View v) {
                    view.post(new Runnable() {
                        @Override
                        public void run() {
                            view.requestFocus();
                            imm.showSoftInput(view, 0);
                        }
                    });

                    view.removeOnAttachStateChangeListener(this);
                }

                @Override
                public void onViewDetachedFromWindow(View v) {
                    view.removeOnAttachStateChangeListener(this);
                }
            });
        }
    }
}

Ich hatte das gleiche Problem. Unmittelbar nachdem sich der Text BEWEGUNG von GONE zu VISIBLE geändert hatte, musste ich den Fokus einstellen und die Soft-Tastatur anzeigen. Ich habe dies mit dem folgenden Code erreicht:

new Handler().postDelayed(new Runnable() {

    public void run() {
//        ((EditText) findViewById(R.id.et_find)).requestFocus();
//              
        EditText yourEditText= (EditText) findViewById(R.id.et_find);
//        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//        imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

        yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
        yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                           
    }
}, 200);

Es funktioniert für mich mit 100ms Verzögerung, aber ohne Verzögerung oder mit nur einer Verzögerung von 1ms.

Der kommentierte Teil des Codes zeigt einen anderen Ansatz, der nur auf einigen Geräten funktioniert. Ich habe auf OS-Versionen 2.2 (Emulator), 2.2.1 (echtes Gerät) und 1.6 (Emulator) getestet.

Dieser Ansatz hat mir viel Schmerz erspart.


Im Abschnitt onResume () der Aktivität können Sie die Methode bringKeyboard () aufrufen;

 onResume() {
     EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
     bringKeyboard(yourEditText);
 }


  protected boolean bringKeyboard(EditText view) {
    if (view == null) {
        return false;
    }
    try {
      // Depending if edittext has some pre-filled values you can decide whether to bring up soft keyboard or not
        String value = view.getText().toString();
        if (value == null) {
            InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            return true;
        }
    } catch (Exception e) {
        Log.e(TAG, "decideFocus. Exception", e);
    }
    return false;
  }

In deinem Manifest:

android:windowSoftInputMode="stateAlwaysVisible" - anfänglich gestartete Tastatur. android:windowSoftInputMode="stateAlwaysHidden" - zunächst versteckte Tastatur.

Ich benutze auch "adjustPan" denn wenn die Tastatur startet, passt sich der Bildschirm automatisch an.

 <activity
      android:name="YourActivity"
      android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>

Mit Xamarin funktioniert das für mich in einem Fragment:

using Android.Views.InputMethods;
using Android.Content;

...

if ( _txtSearch.RequestFocus() ) {
  var inputManager = (InputMethodManager) Activity.GetSystemService( Context.InputMethodService );
  inputManager.ShowSoftInput( _txtSearch, ShowFlags.Implicit );
}

Sie können auch eine benutzerdefinierte Erweiterung von EditText erstellen, die die Soft-Tastatur öffnet, wenn sie den Fokus erhält. Das ist, was ich getan habe. Folgendes hat für mich funktioniert:

public class WellBehavedEditText extends EditText {
    private InputMethodManager inputMethodManager;
    private boolean showKeyboard = false;

    public WellBehavedEditText(Context context) {
        super(context);
        this.initializeWellBehavedEditText(context);
    }

    public WellBehavedEditText(Context context, AttributeSet attributes) {
        super(context, attributes);
        this.initializeWellBehavedEditText(context);
    }

    public WellBehavedEditText(Context context, AttributeSet attributes, int defStyleAttr) {
        super(context, attributes, defStyleAttr);
        this.initializeWellBehavedEditText(context);
    }

    public WellBehavedEditText(Context context, AttributeSet attributes, int defStyleAttr, int defStyleRes) {
        super(context, attributes, defStyleAttr, defStyleRes);
        this.initializeWellBehavedEditText(context);
    }

    private void initializeWellBehavedEditText(Context context) {
        this.inputMethodManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);

        final WellBehavedEditText editText = this;
        this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if(showKeyboard) {
                    showKeyboard = !(inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_FORCED));
                }
            }
        });
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(!focused) this.showKeyboard = false;
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
        boolean result = super.requestFocus(direction, previouslyFocusedRect);
        this.showKeyboard = true;
        final WellBehavedEditText self = this;
        this.post(new Runnable() {
            @Override
            public void run() {
                showKeyboard = !(inputMethodManager.showSoftInput(self, InputMethodManager.SHOW_FORCED));
            }
        });
        return result;
    }
}

Um die Soft-Tastatur zu erzwingen, können Sie verwenden

EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

Und um den Fokus auf EditText zu EditText , benötigen Sie leider eine Dummy- View , um den Fokus zu erhalten.

ich hoffe das hilft

Um es zu schließen, können Sie verwenden

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);

Um die Tastatur zu verstecken, benutze diese:

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

und um die Tastatur zu zeigen:

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Wenn nichts anderes funktioniert, erzwinge, dass es angezeigt wird :

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

android:windowSoftInputMode="stateAlwaysVisible" -> in der Manifest-Datei.

edittext.requestFocus(); -> im Code.

Dies öffnet die Soft-Tastatur, auf der der Bearbeitungstext den Fokus hat, während die Aktivität erscheint.


 void requestFocus(View editText, Activity activity)
{
    try {
        editText.requestFocus();
        InputMethodManager imm = (InputMethodManager) a.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
        activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

Füge diese Zeile hinzu, vergiss nicht

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

editText.post(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    }
});




android-softkeyboard