Ich versuche, den Text bearbeiten verloren Fokus, wenn etwas außerhalb der Text bearbeiten berührt. Hier ist mein Layout xml:Android bearbeiten Text nicht verlieren Fokus, wenn klicken Sie außerhalb der Textansicht
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/White"
android:orientation="vertical"
android:padding="16dp"
android:focusable="true"
android:focusableInTouchMode ="true">
<EditText
android:id="@+id/editCatTitle"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:hint="Enter name"
android:textSize="18dp"/>
<GridView
android:id="@+id/gridViewColor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:columnWidth="100dp"
android:gravity="center"
android:numColumns="6"
android:stretchMode="columnWidth"
android:listSelector="@color/White"></GridView>
<GridView
android:id="@+id/gridViewIcon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:columnWidth="100dp"
android:gravity="center"
android:numColumns="6"
android:stretchMode="columnWidth"
android:listSelector="@color/White"></GridView>
</LinearLayout>
In meinem onCreate:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_create,container,false);
et = (EditText) v.findViewById(R.id.editCatTitle);
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
// lost focus do something here
}
}
});
}
stelle ich die äußere meisten Linear Layout fokussierbarem bereits sein. Wenn ich jedoch außerhalb des Bearbeitungstextes klicke, wird der Fokus immer noch nicht verloren gehen. Irgendwelche Ideen?
Ich fand das online, aber ich weiß nicht, wo ich es hinstellen sollte. Ist es innerhalb onCreate() der Ansicht oder?
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (mEditText.isFocused()) {
Rect outRect = new Rect();
mEditText.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(),(int)event.getRawY())) {
mEditText.clearFocus();
//
// Hide keyboard
//
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
Ich habe die Frage aktualisiert, aber ich bin mir nicht sicher, wo der On-Touch-Listener überschrieben werden soll – hyperfkcb
Überschreiben Sie einfach "dispatchTouchEvent" in Ihrer Aktivität. Genau wie Sie onCreate() überschreiben. Meine Antwort wurde aktualisiert. – Mahesh
Aber es sagte mir, Methode überschreibt nicht Methode von seiner Oberklasse. Übrigens erstreckt sich mein Fragment von Fragment – hyperfkcb