A keyboard is invisible when i touch on AppCompatEditText
I created the class ComplexEditText, which is extended from AppCompatEditText. I settled down my variant of background:
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
I settled down padding:
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
I created the button to clear the input text
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
But the problem is that the keyboard doesn't open when i touch on my custom view (extend from AppCompatEditText). i tried:
setClickable(true)
setFocusable(true)
setShowSoftInputOnFocus(true);
nputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
I settled in AndroidManifes.xml:
android:windowSoftInputMode="adjustResize"
It doesn't work too. The keyboard doesn't appear.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.royallogistics.yegor.royallogistics">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:name=".service.AppChannel"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".LoginActivity" />
<activity android:name=".SubordersDinamicsFields"
android:windowSoftInputMode="stateVisible">
</activity>
ComplexEditText.java
package com.royallogistics.yegor.royallogistics.RestyleView;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.AppCompatEditText;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.royallogistics.yegor.royallogistics.R;
import com.royallogistics.yegor.royallogistics.service.DependentFields;
import java.util.List;
@SuppressLint("ViewConstructor")
public class ComplexEditText extends AppCompatEditText {
// { НЕОБХОДИМЫЕ ПОЛЯ ДЛЯ УПРАВЛЕНИЯ }
private Integer mIndex_on_the_view;
private Integer mField_id;
@Nullable
private Integer mContainer_id;
@Nullable
private List<DependentFields> mActions;
Drawable mClearButtonImage;
EditText text;
float scale = getResources().getDisplayMetrics().density;
void init() {
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
setShowSoftInputOnFocus(true);
// TODO: if the clear (X) button is tapped, clear the text
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("focus", getFullName() + " _ " + String.valueOf(getShowSoftInputOnFocus()));
if ((getCompoundDrawablesRelative()[2] != null)) {
float clearButtonStart; // Used for LTR languages
float clearButtonEnd; // Used for RTL languages
boolean isClearButtonClicked = false;
// TODO: Detect the touch in RTL or LTR layout direction.
if (getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
// If RTL, get the end of the button on the left side.
clearButtonEnd = mClearButtonImage
.getIntrinsicWidth() + getPaddingStart();
// If the touch occurred before the end of the button,
// set isClearButtonClicked to true.
if (event.getX() < clearButtonEnd) {
isClearButtonClicked = true;
}
} else {
// Layout is LTR.
// Get the start of the button on the right side.
clearButtonStart = (getWidth() - getPaddingEnd()
- mClearButtonImage.getIntrinsicWidth());
// If the touch occurred after the start of the button,
// set isClearButtonClicked to true.
if (event.getX() > clearButtonStart) {
isClearButtonClicked = true;
}
}
// TODO: Check for actions if the button is tapped.
if (isClearButtonClicked) {
// Check for ACTION_DOWN (always occurs before ACTION_UP).
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Switch to the black version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
showClearButton();
}
// Check for ACTION_UP.
if (event.getAction() == MotionEvent.ACTION_UP) {
// Switch to the opaque version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
// Clear the text and hide the clear button.
getText().clear();
hideClearButton();
return true;
}
} else {
return false;
}
}
return false;
}
});
// TODO: if the changes, show or hide the clear (X) button
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
showClearButton();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return super.onCreateInputConnection(outAttrs);
}
public ComplexEditText(Context context, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, int defStyleAttr, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs, defStyleAttr);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
private void setupAttributes(AttributeSet attributeSet) {
@SuppressLint("CustomViewStyleable") TypedArray typedArray = getContext().obtainStyledAttributes(attributeSet, R.styleable.ComplexEditTextattr);
typedArray.recycle();
}
String getFullName() {
if (mContainer_id != null) {
Log.e("Полное название", "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id));
return "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id);
} else {
Log.e("Полное название", "field_" + String.valueOf(mField_id));
return "field_" + String.valueOf(mField_id);
}
}
void clearField() {
setText("");
}
Integer getValueInteger() {
return Integer.valueOf(getText().toString());
}
String getValueString() {
return String.valueOf(getText().toString());
}
private void showClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mClearButtonImage, null);
}
private void hideClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, null);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
screenshot with ComplexEditText
java android android-studio keyboard
add a comment |
I created the class ComplexEditText, which is extended from AppCompatEditText. I settled down my variant of background:
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
I settled down padding:
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
I created the button to clear the input text
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
But the problem is that the keyboard doesn't open when i touch on my custom view (extend from AppCompatEditText). i tried:
setClickable(true)
setFocusable(true)
setShowSoftInputOnFocus(true);
nputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
I settled in AndroidManifes.xml:
android:windowSoftInputMode="adjustResize"
It doesn't work too. The keyboard doesn't appear.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.royallogistics.yegor.royallogistics">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:name=".service.AppChannel"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".LoginActivity" />
<activity android:name=".SubordersDinamicsFields"
android:windowSoftInputMode="stateVisible">
</activity>
ComplexEditText.java
package com.royallogistics.yegor.royallogistics.RestyleView;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.AppCompatEditText;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.royallogistics.yegor.royallogistics.R;
import com.royallogistics.yegor.royallogistics.service.DependentFields;
import java.util.List;
@SuppressLint("ViewConstructor")
public class ComplexEditText extends AppCompatEditText {
// { НЕОБХОДИМЫЕ ПОЛЯ ДЛЯ УПРАВЛЕНИЯ }
private Integer mIndex_on_the_view;
private Integer mField_id;
@Nullable
private Integer mContainer_id;
@Nullable
private List<DependentFields> mActions;
Drawable mClearButtonImage;
EditText text;
float scale = getResources().getDisplayMetrics().density;
void init() {
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
setShowSoftInputOnFocus(true);
// TODO: if the clear (X) button is tapped, clear the text
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("focus", getFullName() + " _ " + String.valueOf(getShowSoftInputOnFocus()));
if ((getCompoundDrawablesRelative()[2] != null)) {
float clearButtonStart; // Used for LTR languages
float clearButtonEnd; // Used for RTL languages
boolean isClearButtonClicked = false;
// TODO: Detect the touch in RTL or LTR layout direction.
if (getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
// If RTL, get the end of the button on the left side.
clearButtonEnd = mClearButtonImage
.getIntrinsicWidth() + getPaddingStart();
// If the touch occurred before the end of the button,
// set isClearButtonClicked to true.
if (event.getX() < clearButtonEnd) {
isClearButtonClicked = true;
}
} else {
// Layout is LTR.
// Get the start of the button on the right side.
clearButtonStart = (getWidth() - getPaddingEnd()
- mClearButtonImage.getIntrinsicWidth());
// If the touch occurred after the start of the button,
// set isClearButtonClicked to true.
if (event.getX() > clearButtonStart) {
isClearButtonClicked = true;
}
}
// TODO: Check for actions if the button is tapped.
if (isClearButtonClicked) {
// Check for ACTION_DOWN (always occurs before ACTION_UP).
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Switch to the black version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
showClearButton();
}
// Check for ACTION_UP.
if (event.getAction() == MotionEvent.ACTION_UP) {
// Switch to the opaque version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
// Clear the text and hide the clear button.
getText().clear();
hideClearButton();
return true;
}
} else {
return false;
}
}
return false;
}
});
// TODO: if the changes, show or hide the clear (X) button
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
showClearButton();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return super.onCreateInputConnection(outAttrs);
}
public ComplexEditText(Context context, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, int defStyleAttr, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs, defStyleAttr);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
private void setupAttributes(AttributeSet attributeSet) {
@SuppressLint("CustomViewStyleable") TypedArray typedArray = getContext().obtainStyledAttributes(attributeSet, R.styleable.ComplexEditTextattr);
typedArray.recycle();
}
String getFullName() {
if (mContainer_id != null) {
Log.e("Полное название", "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id));
return "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id);
} else {
Log.e("Полное название", "field_" + String.valueOf(mField_id));
return "field_" + String.valueOf(mField_id);
}
}
void clearField() {
setText("");
}
Integer getValueInteger() {
return Integer.valueOf(getText().toString());
}
String getValueString() {
return String.valueOf(getText().toString());
}
private void showClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mClearButtonImage, null);
}
private void hideClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, null);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
screenshot with ComplexEditText
java android android-studio keyboard
Have you tried on a physical device or just the emulator ?
– 113408
Jan 19 at 14:15
@113408 i have tried on the emulator and a physical device
– Dorokhov Yegor
Jan 19 at 14:27
add a comment |
I created the class ComplexEditText, which is extended from AppCompatEditText. I settled down my variant of background:
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
I settled down padding:
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
I created the button to clear the input text
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
But the problem is that the keyboard doesn't open when i touch on my custom view (extend from AppCompatEditText). i tried:
setClickable(true)
setFocusable(true)
setShowSoftInputOnFocus(true);
nputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
I settled in AndroidManifes.xml:
android:windowSoftInputMode="adjustResize"
It doesn't work too. The keyboard doesn't appear.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.royallogistics.yegor.royallogistics">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:name=".service.AppChannel"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".LoginActivity" />
<activity android:name=".SubordersDinamicsFields"
android:windowSoftInputMode="stateVisible">
</activity>
ComplexEditText.java
package com.royallogistics.yegor.royallogistics.RestyleView;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.AppCompatEditText;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.royallogistics.yegor.royallogistics.R;
import com.royallogistics.yegor.royallogistics.service.DependentFields;
import java.util.List;
@SuppressLint("ViewConstructor")
public class ComplexEditText extends AppCompatEditText {
// { НЕОБХОДИМЫЕ ПОЛЯ ДЛЯ УПРАВЛЕНИЯ }
private Integer mIndex_on_the_view;
private Integer mField_id;
@Nullable
private Integer mContainer_id;
@Nullable
private List<DependentFields> mActions;
Drawable mClearButtonImage;
EditText text;
float scale = getResources().getDisplayMetrics().density;
void init() {
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
setShowSoftInputOnFocus(true);
// TODO: if the clear (X) button is tapped, clear the text
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("focus", getFullName() + " _ " + String.valueOf(getShowSoftInputOnFocus()));
if ((getCompoundDrawablesRelative()[2] != null)) {
float clearButtonStart; // Used for LTR languages
float clearButtonEnd; // Used for RTL languages
boolean isClearButtonClicked = false;
// TODO: Detect the touch in RTL or LTR layout direction.
if (getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
// If RTL, get the end of the button on the left side.
clearButtonEnd = mClearButtonImage
.getIntrinsicWidth() + getPaddingStart();
// If the touch occurred before the end of the button,
// set isClearButtonClicked to true.
if (event.getX() < clearButtonEnd) {
isClearButtonClicked = true;
}
} else {
// Layout is LTR.
// Get the start of the button on the right side.
clearButtonStart = (getWidth() - getPaddingEnd()
- mClearButtonImage.getIntrinsicWidth());
// If the touch occurred after the start of the button,
// set isClearButtonClicked to true.
if (event.getX() > clearButtonStart) {
isClearButtonClicked = true;
}
}
// TODO: Check for actions if the button is tapped.
if (isClearButtonClicked) {
// Check for ACTION_DOWN (always occurs before ACTION_UP).
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Switch to the black version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
showClearButton();
}
// Check for ACTION_UP.
if (event.getAction() == MotionEvent.ACTION_UP) {
// Switch to the opaque version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
// Clear the text and hide the clear button.
getText().clear();
hideClearButton();
return true;
}
} else {
return false;
}
}
return false;
}
});
// TODO: if the changes, show or hide the clear (X) button
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
showClearButton();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return super.onCreateInputConnection(outAttrs);
}
public ComplexEditText(Context context, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, int defStyleAttr, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs, defStyleAttr);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
private void setupAttributes(AttributeSet attributeSet) {
@SuppressLint("CustomViewStyleable") TypedArray typedArray = getContext().obtainStyledAttributes(attributeSet, R.styleable.ComplexEditTextattr);
typedArray.recycle();
}
String getFullName() {
if (mContainer_id != null) {
Log.e("Полное название", "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id));
return "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id);
} else {
Log.e("Полное название", "field_" + String.valueOf(mField_id));
return "field_" + String.valueOf(mField_id);
}
}
void clearField() {
setText("");
}
Integer getValueInteger() {
return Integer.valueOf(getText().toString());
}
String getValueString() {
return String.valueOf(getText().toString());
}
private void showClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mClearButtonImage, null);
}
private void hideClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, null);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
screenshot with ComplexEditText
java android android-studio keyboard
I created the class ComplexEditText, which is extended from AppCompatEditText. I settled down my variant of background:
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
I settled down padding:
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
I created the button to clear the input text
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
But the problem is that the keyboard doesn't open when i touch on my custom view (extend from AppCompatEditText). i tried:
setClickable(true)
setFocusable(true)
setShowSoftInputOnFocus(true);
nputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
I settled in AndroidManifes.xml:
android:windowSoftInputMode="adjustResize"
It doesn't work too. The keyboard doesn't appear.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.royallogistics.yegor.royallogistics">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:name=".service.AppChannel"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".LoginActivity" />
<activity android:name=".SubordersDinamicsFields"
android:windowSoftInputMode="stateVisible">
</activity>
ComplexEditText.java
package com.royallogistics.yegor.royallogistics.RestyleView;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.AppCompatEditText;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.royallogistics.yegor.royallogistics.R;
import com.royallogistics.yegor.royallogistics.service.DependentFields;
import java.util.List;
@SuppressLint("ViewConstructor")
public class ComplexEditText extends AppCompatEditText {
// { НЕОБХОДИМЫЕ ПОЛЯ ДЛЯ УПРАВЛЕНИЯ }
private Integer mIndex_on_the_view;
private Integer mField_id;
@Nullable
private Integer mContainer_id;
@Nullable
private List<DependentFields> mActions;
Drawable mClearButtonImage;
EditText text;
float scale = getResources().getDisplayMetrics().density;
void init() {
mClearButtonImage = ResourcesCompat.getDrawable(getResources(), R.mipmap.delete_button, null);
setBackground(getResources().getDrawable(R.drawable.backgroundedittext));
setPadding((int) (16 * scale), (int) (10 * scale), (int) (17 * scale), (int) (13 * scale));
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
setShowSoftInputOnFocus(true);
// TODO: if the clear (X) button is tapped, clear the text
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("focus", getFullName() + " _ " + String.valueOf(getShowSoftInputOnFocus()));
if ((getCompoundDrawablesRelative()[2] != null)) {
float clearButtonStart; // Used for LTR languages
float clearButtonEnd; // Used for RTL languages
boolean isClearButtonClicked = false;
// TODO: Detect the touch in RTL or LTR layout direction.
if (getLayoutDirection() == LAYOUT_DIRECTION_RTL) {
// If RTL, get the end of the button on the left side.
clearButtonEnd = mClearButtonImage
.getIntrinsicWidth() + getPaddingStart();
// If the touch occurred before the end of the button,
// set isClearButtonClicked to true.
if (event.getX() < clearButtonEnd) {
isClearButtonClicked = true;
}
} else {
// Layout is LTR.
// Get the start of the button on the right side.
clearButtonStart = (getWidth() - getPaddingEnd()
- mClearButtonImage.getIntrinsicWidth());
// If the touch occurred after the start of the button,
// set isClearButtonClicked to true.
if (event.getX() > clearButtonStart) {
isClearButtonClicked = true;
}
}
// TODO: Check for actions if the button is tapped.
if (isClearButtonClicked) {
// Check for ACTION_DOWN (always occurs before ACTION_UP).
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Switch to the black version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
showClearButton();
}
// Check for ACTION_UP.
if (event.getAction() == MotionEvent.ACTION_UP) {
// Switch to the opaque version of clear button.
mClearButtonImage =
ResourcesCompat.getDrawable(getResources(),
R.mipmap.delete_button, null);
// Clear the text and hide the clear button.
getText().clear();
hideClearButton();
return true;
}
} else {
return false;
}
}
return false;
}
});
// TODO: if the changes, show or hide the clear (X) button
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
showClearButton();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return super.onCreateInputConnection(outAttrs);
}
public ComplexEditText(Context context, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
public ComplexEditText(Context context, @Nullable AttributeSet attrs, int defStyleAttr, Integer mIndex_on_the_view, Integer mField_id, @Nullable Integer mContainer_id, @Nullable List<DependentFields> mActions) {
super(context, attrs, defStyleAttr);
this.mIndex_on_the_view = mIndex_on_the_view;
this.mField_id = mField_id;
this.mContainer_id = mContainer_id;
this.mActions = mActions;
init();
}
private void setupAttributes(AttributeSet attributeSet) {
@SuppressLint("CustomViewStyleable") TypedArray typedArray = getContext().obtainStyledAttributes(attributeSet, R.styleable.ComplexEditTextattr);
typedArray.recycle();
}
String getFullName() {
if (mContainer_id != null) {
Log.e("Полное название", "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id));
return "field_" + String.valueOf(mField_id) + "_" + String.valueOf(mContainer_id);
} else {
Log.e("Полное название", "field_" + String.valueOf(mField_id));
return "field_" + String.valueOf(mField_id);
}
}
void clearField() {
setText("");
}
Integer getValueInteger() {
return Integer.valueOf(getText().toString());
}
String getValueString() {
return String.valueOf(getText().toString());
}
private void showClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, mClearButtonImage, null);
}
private void hideClearButton() {
setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, null, null);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
screenshot with ComplexEditText
java android android-studio keyboard
java android android-studio keyboard
asked Jan 19 at 14:06
Dorokhov YegorDorokhov Yegor
32
32
Have you tried on a physical device or just the emulator ?
– 113408
Jan 19 at 14:15
@113408 i have tried on the emulator and a physical device
– Dorokhov Yegor
Jan 19 at 14:27
add a comment |
Have you tried on a physical device or just the emulator ?
– 113408
Jan 19 at 14:15
@113408 i have tried on the emulator and a physical device
– Dorokhov Yegor
Jan 19 at 14:27
Have you tried on a physical device or just the emulator ?
– 113408
Jan 19 at 14:15
Have you tried on a physical device or just the emulator ?
– 113408
Jan 19 at 14:15
@113408 i have tried on the emulator and a physical device
– Dorokhov Yegor
Jan 19 at 14:27
@113408 i have tried on the emulator and a physical device
– Dorokhov Yegor
Jan 19 at 14:27
add a comment |
1 Answer
1
active
oldest
votes
i add the following line in the constructor:
clearFocus();
and i add the following code in the onTouch method:
requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54267908%2fa-keyboard-is-invisible-when-i-touch-on-appcompatedittext%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
i add the following line in the constructor:
clearFocus();
and i add the following code in the onTouch method:
requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
add a comment |
i add the following line in the constructor:
clearFocus();
and i add the following code in the onTouch method:
requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
add a comment |
i add the following line in the constructor:
clearFocus();
and i add the following code in the onTouch method:
requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
i add the following line in the constructor:
clearFocus();
and i add the following code in the onTouch method:
requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
answered Jan 19 at 15:49
Dorokhov YegorDorokhov Yegor
32
32
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54267908%2fa-keyboard-is-invisible-when-i-touch-on-appcompatedittext%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Have you tried on a physical device or just the emulator ?
– 113408
Jan 19 at 14:15
@113408 i have tried on the emulator and a physical device
– Dorokhov Yegor
Jan 19 at 14:27