我有这个布局:
<?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设置为开头可见,则可以正常工作。它显示了布局,如果我在不可见和可见之间切换它可以正常工作。
我做了一个几乎总是有效的解决方法。 我启动布局是可见的,而不是在oncreate中执行:
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();
}
}
答案 0 :(得分:0)
向RelativeLayout
添加点击监听器,并在GONE
和VISIBLE
之间切换可见性。尝试这样的事情:
int visibility = View.VISIBLE;
RelativeLayout layout = (RelativeLayout)findViewById(R.id.ChatLayout);
layout.setVisibility(visibility);
layout.setOnClickListener(new View.OnClickListener{
public void onClick(View v)
{
if(visibility == View.VISIBLE)
visibility = View.GONE;
else
visibility = View.VISIBLE;
v.setVisibility(visibility);
}
})
答案 1 :(得分:0)
我最近遇到了类似的问题,对于我的情况,问题实际上是在下面的视图的onDraw()方法中(在你的情况下应该是com.components.game.GameView
)。看看您是否可以在绘图代码中添加对Canvas'getSaveCount()
,save()
和restoreToCount()
的调用,类似于:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int saveCount = canvas.getSaveCount();
canvas.save();
// custom drawing code here ...
// use Region.Op.INTERSECT for adding clipping regions
canvas.restoreToCount(saveCount);
}
我相信所发生的事情是,在我们调用onDraw()方法之前,框架有时会在Canvas-drawing小部件的顶部设置剪切区域,因此我们需要确保保留这些区域。
希望这有帮助。