【发布时间】:2011-12-09 23:30:19
【问题描述】:
为什么下面的代码会失败?
我的 main.xml 中有一个蓝色的 relativeLayout。单击时,我将添加一个绿色按钮。
在我的摩托罗拉 Xoom 上运行时,我单击屏幕并看到绿色按钮出现,但背景从蓝色变为黑色。如果我再次点击我的蓝色背景显示。再次点击,我看到黑色...
我错过了什么?
感谢您的帮助。
package com.android.mikeviewtester;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
public class ViewTesterActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
// set the relative layout as our view
setContentView( R.layout.main );
RelativeLayout currentView = (RelativeLayout) findViewById( R.id.MyRelativeLayout );
// set a listener
currentView.setOnTouchListener( (android.view.View.OnTouchListener) mOnTouchListener );
}
private android.view.View.OnTouchListener mOnTouchListener = new android.view.View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if ( v != null )
v.onTouchEvent( event );
if ( event.getAction() == MotionEvent.ACTION_UP ) {
android.widget.RelativeLayout vw = (android.widget.RelativeLayout) findViewById( R.id.MyRelativeLayout );
// create and add a new cyan button
Button btn = new Button( ViewTesterActivity.this );
btn.setBackgroundColor( Color.GREEN );
vw.addView( btn, 100, 100 );
vw.invalidate();
btn.invalidate();
}
return true;
}
};
}
Main.xml
<?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"
android:id="@+id/MyRelativeLayout"
android:background="#0000FF">
</RelativeLayout>
【问题讨论】:
-
可能与您为新按钮设置的 viewgroup.layoutparams 有关,我不确定,将不得不摆弄它;)在您添加后尝试无效?
-
我玩弄了 layoutparams 设置,但没有运气。尝试使用 addView( btn, 100, 100 ) 来避免 layoutparams。我已经尝试过 invalidate() 和 invalidateRect(..)。当我在视图上调用 getDrawingRect() 时,我得到了整个画布矩形,这样看起来还可以。
标签: android