Я вижу проблемы с рисованием в сотах, которые я не могу понять.По какой-то причине, когда я добавляю кнопки к представлению в коде, фон представления исчезает (становится черным).
Это прекрасно работает на моей вкладке Galaxy под управлением 2.3.Он не работает в эмуляторе или на моем Motorolla Xoom, работающем с 3.2.
Подробности:
В onCreate () я устанавливаю либо цвет фона, либо фоновое изображение дляlativeLayout, определенного в main.XML.Мой относительный размер определяется как fill_parent.
У меня есть OnTouchListener для моей деятельности, в котором я добавляю две зеленые кнопки (одну выровненную по левому краю, одну выровненную по правому краю), к относительной длине.
Когда ядобавьте эти две кнопки, фон относительной раскладки исчезнет (покажет все черным).Я не могу объяснить, почему.
Подсказки:
Если я установлю цвет одной из зеленых кнопок вместо Color.TRANSPARENT, все будет работать, и мой фонне исчезаетЭто похоже на большую подсказку, но я не могу понять, что это значит.
При использовании цветного фона, если я установлю targetSdkVersion на «11» вместо «7» (Я нацеливаюсь на 2.1 / 7) это работает, и мой цветной фон не исчезает.Но изображения все еще повреждены.
При использовании цветного фона я могу вызвать setDrawingCacheBackgroundColor (Color.RED), в результате чего красный фон вместо черного.Я мог бы использовать это в качестве решения, установив цвет кэша на свой фоновый цвет, но это не работает при использовании изображений.
Это действительно похоже на ошибку в Android, потому что я могуне вижу, что я делаю что-то не так в моем коде.Буду признателен за любую помощь или совет.
Вот мой простой макет 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/MyLayout">
</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 );
// get the relative layout
android.widget.RelativeLayout layout = (android.widget.RelativeLayout) findViewById( R.id.MyLayout );
// set an on touch listener
layout.setOnTouchListener( (android.view.View.OnTouchListener) mOnTouchListener );
// set a background image
// PROBLEM: this background image disappears when adding the buttons in our touch handler
// GOOFY FIX: If I change the color of one of the buttons we add to be Color.TRANSPARENT, this
// background image doesn't disappear.
layout.setBackgroundResource( R.drawable.icon );
layout.setDrawingCacheEnabled( false );
// alternatively, set background color
// PROBLEM: the color disappears (becomes black) when adding the button in our touch handler
// GOOFY FIX: If I change the color of one of the buttons we add to be Color.TRANSPARENT, the color
// doesn't disappear
// GOOFY FIX 2: If I set android:targetSdkVersion to "11" in our manifest, the color doesn't disappear
// CLUE?: Without any fixes above and using color as the background, if I set the drawing cache color
// to Color.RED it'll show up instead of black. This would be a great solution to my problem but it
// doesn't work for background images.
// layout.setDrawingCacheBackgroundColor( Color.RED );
// layout.setDrawingCacheEnabled( true );
}
// on touch listener, add two buttons to the view
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 layout = (android.widget.RelativeLayout) findViewById( R.id.MyLayout );
// add a green button, left aligned
Button btn = new Button( ViewTesterActivity.this );
btn.setBackgroundColor( Color.GREEN );
// GOOFY FIX: setting this instead of green solves the issue, no disappearing background
// btn.setBackgroundColor( Color.TRANSPARENT );
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( 100, 100 );
params.addRule( RelativeLayout.ALIGN_PARENT_LEFT );
layout.addView( btn, params );
// add a green button, right aligned
btn = new Button( ViewTesterActivity.this );
btn.setBackgroundColor( Color.GREEN );
params = new RelativeLayout.LayoutParams( 100, 100 );
params.addRule( RelativeLayout.ALIGN_PARENT_RIGHT );
layout.addView( btn, params );
}
return true;
}
};
}