Скрывать клавиатуру, нажав на любую часть Activity

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

Я хочу, чтобы клавиатура закрылась каждый раз, когда он кликнул вне, не имей значения, если я это делаю в одном TextView, ImageView... или пустое место.

Это я функционировало, но я должен дважды щелкать, если я это делаю на ScrollView:

@Override
public boolean onTouchEvent(MotionEvent event) {
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.
            INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    return true;
}

Кто-то может помогать мне?

clase:

public class Prueba extends AppCompatActivity implements SimpleGestureListener {

    TextView TextView1;
    GestosActivity detector;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prueba);

        // Oculta teclado al iniciar la Activity
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        TextView1 = (TextView) findViewById(R.id.TextView1);

        // gestos
        detector = new GestosActivity(this, this);


        // cierra teclado al hacer clic en TextView1
        TextView1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
                return false;
            }
        });

    }

    // gestos

    @Override
    public boolean dispatchTouchEvent(MotionEvent me) {
        this.detector.onTouchEvent(me);
        return super.dispatchTouchEvent(me);
    }

    @Override
    public void onSwipe(int direction) {
        switch (direction) {
            case GestosActivity.SWIPE_DOWN:
                Toast.makeText(this, "Sin función de momento", Toast.LENGTH_LONG).show();
                break;
            case GestosActivity.SWIPE_UP:
                Toast.makeText(this, "Sin función de momento", Toast.LENGTH_LONG).show();
                    }
                }
}

Layout

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/base_añadir"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#f4f4f4">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="5dp"
            android:gravity="top|center"
            android:orientation="vertical">

            <EditText
                android:id="@+id/editTextNombre"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPersonName"
                android:text="Name" />

            <TextView
                android:id="@+id/TextView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="TextView" />

        </LinearLayout>
    </ScrollView>
</AbsoluteLayout>

EDITO1:

public class Prueba extends AppCompatActivity implements SimpleGestureListener {

    TextView TextView1;
    GestosActivity detector;
    EditText editTextNombre;
    View view;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.prueba);

        // Oculta teclado al iniciar la Activity
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        editTextNombre = (EditText) findViewById(R.id.editTextNombre);
        TextView1 = (TextView) findViewById(R.id.TextView1);

        // gestos
        detector = new GestosActivity(this, this);


editTextNombre.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
});

    }

    // gestos

    @Override
    public boolean dispatchTouchEvent(MotionEvent me) {
        this.detector.onTouchEvent(me);
        return super.dispatchTouchEvent(me);
    }

    @Override
    public void onSwipe(int direction) {
        switch (direction) {
            case GestosActivity.SWIPE_DOWN:
                Toast.makeText(this, "Sin función de momento", Toast.LENGTH_LONG).show();
                break;
            case GestosActivity.SWIPE_UP:
                Toast.makeText(this, "Sin función de momento", Toast.LENGTH_LONG).show();
                    }
                }
}
0
задан 13.03.2017, 17:28
1 ответ

ты можешь делать то же самое, что и твой код, но когда edittext потеряет фокус. Когда ты кликаешь в, разворачивается клавиатура и получает фокус, так что, когда ты кликаешь вне, он был, где он был, теряет фокус и следовательно он мог бы скрывать клавиатуру. Что-либо подобное:

NombreDeTuEditText.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
});

Уже я dirÃ: s, если оно ты функционирует.

, Хотя как последний ресурс и грязнее, ты всегда можешь помещать этот c¦digo в весь твой контроль для того, чтобы, нажав на любую из нее, закрылся keyboard.

типов Привета.

2
ответ дан 24.11.2019, 10:38
  • 1
    Оно я не функционировало, он ничего не делает, кликнув вне клавиатуры, остается открытым, я существую añ adido в вопрос, поскольку остается класс, с которым ты комментируешь мне, если ты видишь, что я делаю немного плохо, спасибо @Curro – UserNameYo 13.03.2017, 17:28
  • 2
    Debugea app и подтверди, что, кликнув в этом edittext, он берет focus, и что, кликнув снаружи, он это теряет. Ключ будет являться там, конечно это не будет делать, как мы хотим, и оно не функционирует совсем хорошо. – Curro 13.03.2017, 17:40
  • 3
    Проблема состоит в том, что он не берет focus @Curro – UserNameYo 13.03.2017, 18:23
  • 4
    Стой, в этом случае то, что ты можешь делать, состоит в том, чтобы скрывать клавиатуру в событии onclicklistener от главного layout твоего xml, " +id/base_añ adir". Ты устанавливаешь это событие onclicklistener и там он, где ты скрываешь клавиатуру. Я надеюсь объясниться jejeje – Curro 13.03.2017, 22:15
  • 5
    Изданная ответ. Я сожалею о том, что мы не нашли совершенное решение. До предстоящей. – Curro 14.03.2017, 00:28

Теги

Похожие вопросы