У меня есть этот макет:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.components.game.GameView
android:id="@+id/game_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<RelativeLayout
android:id="@+id/ChatLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:visibility="invisible"
android:focusable="true"
android:focusableInTouchMode="true" >
<Button
android:id="@+id/ChatCancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X" />
<Button
android:id="@+id/ChatOkButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="OK" />
<EditText
android:id="@+id/ChatEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/ChatOkButton"
android:layout_toRightOf="@+id/ChatCancelButton"
android:maxLength="50"
android:singleLine="true" />
</RelativeLayout>
</RelativeLayout>
Это RelativeLayout на холсте. Во время запуска он невидим, но когда пользователь нажимает кнопку, макет должен стать видимым.
Проблема в том, что это не становится видимым. Макет есть, но он просто не рисует. Если я нажимаю позицию, в которой должен появиться макет, он получает событие и открывает клавиатуру, но он не рисует весь макет.
В чем проблема?
Если я установил RelativeLayout в видимый в начале, он будет работать нормально. это показывает расположение, и если я переключаюсь между невидимым и видимым, это прекрасно работает.
Я сделал обходной путь, который почти всегда работает.
Я запускаю макет видимым, а затем делаю это в текущем:
chatLayout.postDelayed(new Runnable() {
@Override
public void run() {
chatLayout.setVisibility(View.INVISIBLE);
}
}, 50);
Но мне это не нравится, и я хочу понять, в чем проблема.
код:
Он начинается с кнопки холста, которая отправляет сообщение обработчику:
public void showInputLayout() {
Message.obtain(gameHandler, SHOW_INPUT_LAYOUT).sendToTarget();
}
В обработчике:
case SHOW_INPUT_LAYOUT:
gameActivity.setChatVisibility(true);
break;
setChatVisibility:
public void setChatVisibility(boolean isVisible) {
int visible = isVisible ? View.VISIBLE : View.INVISIBLE;
chatLayout.setVisibility(visible);
if(isVisible){
chatEditText.setFocusable(true);
chatEditText.requestFocus();
}
}