70

I've read the other questions discussing this, and all of them work for my layouts, except for the very first one created.

At the moment, this is at the top of my onCreate method:

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

^ That makes it so at least the keyboard doesn't pop up on startup, but the EditText is still focused on.

This is the XML for my EditText:

<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> 

This is what it looks like when I bring up my activity:

enter image description here

The problem is that with some phones, when an EditText is focused like this, they can't write in it. I want it to not focus.

What I've done works for the next layouts brought up in that it the EditTexts are not focused on and would look more like this:

enter image description here

Notice that it's the same layout, though. This is the screen after the user has been brought back to this screen, which would indicate nothing wrong with the XML because this is the same XML, but the problem is that the EditText is only focused on when the activity is created.

I've done research and all of the other questions don't help me with this (they did however help the keyboard not show up, thankfully). How can I make it so the EditText on startup will look like the second screenshot, rather than the first?

3
  • 2
    Have you tried android:focusable="false" in EditText ? Commented Aug 18, 2013 at 5:08
  • @PratikButani that makes it so it can never be focused on, though. Commented Aug 18, 2013 at 5:15
  • Adding android:focusableInTouchMode="true" on my parent layout works for me. Commented May 12, 2017 at 15:05

16 Answers 16

304

You can set property of Layout like android:descendantFocusability="beforeDescendants" and android:focusableInTouchMode="true"

Example:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainLayout" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" > <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> </RelativeLayout> 

May this one helpful ;)

Sign up to request clarification or add additional context in comments.

Comments

19

XML code:

<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:focusable="false" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> 

Java code:

EditText edPwd = (EditText)findViewById(R.id.password); edtPwd.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.setFocusable(true); v.setFocusableInTouchMode(true); return false; } }); 

set focusable false in xml and set it true via the code

2 Comments

Good solution ... the answer marked correct results in the IME option actionNext failing completely.
I tried it first it didn't work, my bad I was testing on emulator with no touch screen, On real device its working like a charm, Thanks @Meher
12

In your main_layout add this 2 lines:

android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

example:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout> 

1 Comment

Edit Text is not focused but the keyboard is visible.
3

the best solution is here: https://stackoverflow.com/a/45139132/3172843

the correct and simple solution is to setFocusable false and setFocusableInTouchMode true . so the EditText gain focus only when user touch that EditText

android:focusable="false" android:focusableInTouchMode="true" 

Comments

2

Add this in onCreate()

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

or in onCreateView()

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

Comments

2

Whenever I'm trying to open Editext after selection item of Spinner, so on that time not able to open keyboard & write down the values in Edit text, but I resolved my issue with this code.

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> <androidx.appcompat.widget.AppCompatEditText android:id="@+id/titleName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textCapWords" android:hint="@string/hint_your_full_name" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> 

Thanks!

Comments

1

XML Code

<EditText android:imeOptions="flagNoExtractUi" android:focusable="false" /> 

Java Code in onClickListerner

 mEdtEnterPhoneNumber.setFocusable(true); mEdtEnterPhoneNumber.setFocusableInTouchMode(true); 

Comments

0

You can do this programmatically. use editText.setEnabled(false) in your onStart() method of your activity (not in onCreate() - because this is some method for initializing GUI components)

1 Comment

This would completely disable the EditText, which is not what is needed. I'm not sure (because I haven't tested), but I don't think disabling and then re-enabling would work either. Unless there's something I'm missing, make sure you understand the question.
0

It is possible to use android:focusable="false" to disable it, but if that does not work for some reason, then you can simply put a LinearLayout and it will take the focus without disrupting your layout.

NOTE: Eclipse will give you an error saying that your LinearLayout is useless because it has no contents. You should be able to disregard it with no problems.

For example:

<LinearLayout android:focusable="true" android:focusableInTouchMode="false" android:layout_width="0dp" android:layout_height="0dp" /> <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" > </EditText> </LinearLayout> 

Comments

0

The easiest way is to add

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

in the activity tag of the Manifest.xml file

Comments

0

1) Its the simplest,open the manifest and put the following code between the activity tag:

android:windowSoftInputMode="stateHidden" 

2) Put this attributes in the parent layout

android:focusable="true" android:focusableInTouchMode="true" 

Comments

0

In Manifest , copy and paste the beneath code.

 <activity android:name=".LoginActivity" android:windowSoftInputMode="stateAlwaysHidden"/> 

Comments

0
<activity android:name=".MainActivity" android:windowSoftInputMode="stateAlwaysHidden" /> 

android:windowSoftInputMode="stateAlwaysHidden"

add this line in the activity tag of the Manifest.xml file.when you click on the EditText the keyboard gets into focus.

Comments

0
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.appcompat.widget.AppCompatButton android:id="@+id/changePassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:text="Change Password" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.appcompat.widget.AppCompatButton android:id="@+id/accountPassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Account Password" app:layout_constraintBottom_toBottomOf="@+id/changePassword" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@+id/changePassword" /> <androidx.appcompat.widget.AppCompatEditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="152dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="text" android:text="Name" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.497" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/changePassword" /> </androidx.constraintlayout.widget.ConstraintLayout> 

1 Comment

That's one long wall of xml text... for the sake of future visitors, can you please edit and explain what does what?
0

Modify your root layout by adding

android:focusable="true"
and
android:focusableInTouchMode="true"

 <LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> 
  • The parent absorbs focus, preventing EditText from being focused at startup.

  • No need to modify Java/Kotlin code.

  • Works reliably on all Android versions.

Comments

-7

use android:focusable="false" for focusing disable

<EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/changePass" android:layout_centerHorizontal="true" android:layout_marginTop="167dp" android:ems="10" android:imeOptions="flagNoExtractUi" android:inputType="textPassword" android:maxLength="30" android:focusable="false" > </EditText> 

3 Comments

it works, but that makes it so it can never be focused on, even after touching.
you can use event listener when you need to make it focusable
edit your answer to have that, and I'll vote you up. Someone already answered with what you said, though.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.