Я программно устанавливаю значение x для edittext
.Однако при этом функция настройки панорамирования не работает.Любые идеи о том, как сделать эту работу.activity
не в полноэкранном режиме, и это происходит только в APIs > 23
.
Пример.
Edittext editext = findViewById(R.id.edittext);
edittext.setX(200);
// Нажатие на edittext
теперь закрывает программную клавиатуру, если она находится на экране достаточно низко
Примечание: это также происходит с setY()
Вот пример для воспроизведения ошибки:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context context = this;
setContentView(R.layout.activity_main);
//Get edittext from layout file and set X and Y to the bottom
//left of screen
EditText edittext = findViewById(R.id.editText);
edittext.setX(0);
//Getting device frame to make sure its below keyboard, Not
//necessary can just guess any value
edittext.setY(getDeviceFrame(context).getHeight() / 1.2f);
}
С макетом:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
И манифестом:
<activity android:name=".MainActivity"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
В результате чегомакет: Редактировать текст после программных setX и setY
И после нажатия на editext мы получаем: Скрытый editext
То, что вы видите, скрытоклавиатура.
ОБНОВЛЕНИЕ: я пытался использовать различные варианты для перемещения EditText безрезультатно.
Пример.
edittext.animate().x(200);
ОБНОВЛЕНИЕ 2: Мне еще предстоит решить эту проблему.Я подошел ближе, поскольку провел некоторый тест, и кажется, что использование параметров макета для управления позиционированием вида работает до некоторой степени.
Пример.
ConstraintLayout.LayoutParams layoutParams =
(ConstraintLayout.LayoutParams) view.getLayoutParams();
layoutParams.leftMargin = 200; //Your X Coordinate
layoutParams.topMargin = 200; //Your Y Coordinate
view.setLayoutParams(layoutParams);
В некоторой степени, я имею в виду, что я перепутался с функциональностью этих методов в библиотеке тестов, и кажется, что работает выше, используя onCreate ().Тем не менее, в моем приложении, я делаю вызов в обратном вызове.SetX работает нормально, без необходимости устанавливать его в ветке 'post' или в ветке 'runOnMainUI'.Поэтому я не уверен, почему это не работает.