Этот странный. У меня есть список, который является частью Relative Layout. Я установил фон для этого относительного макета и сделал фон представления списка прозрачным.
Итак, до сегодняшнего утра все шло отлично. Я мог видеть весь экран, покрытый моим индивидуальным фоном, даже если в моем представлении списка была только одна строка.
Затем я получил обновление Verizon Motorola Droid X для 2.3.3 (раньше было 2.2). После обновления я снова запустил приложение, и вот что происходит.
Если в моем представлении списка только одна строка, я вижу под ним белую область, а не свой собственный фон. Но если он имеет, скажем, 100 строк и, таким образом, покрывает весь экран, я не увижу этого странного белого фона. В моем относительном макете ширина и высота установлены на "fill_parent".
Я разместил свой XML внизу. Кто-нибудь еще сталкивался с этой проблемой, или я совершаю действительно глупую ошибку.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background = "@drawable/background"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id = "@+id/listQueue"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:layout_below = "@id/homeScreenBanner"
android:background="@android:color/transparent"
android:divider="@drawable/separator"
android:scrollingCache="false"/>
</RelativeLayout>
EDIT:
Думаю, я нашел решение этой проблемы:
Изменил атрибут layout_height на wrap_content, и это сработало как шарм. :)
После измененной строки.
android: layout_height = "wrap_content"
Я написал класс, который можно использовать в Android 2.1 / 2, который будет правильно работать в 2.3, используя отражение с ListViews:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.ListView;
public class TransparentListView extends ListView {
private void makeTransparent() {
if (Build.VERSION.SDK_INT >= 9) {
try {
Method overscrollFooterMethod =
TransparentListView.class.getMethod("setOverscrollFooter", new Class[] {Drawable.class});
Method overscrollHeaderMethod =
TransparentListView.class.getMethod("setOverscrollHeader", new Class[] {Drawable.class});
try {
overscrollFooterMethod.invoke(this, new Object[] {null});
overscrollHeaderMethod.invoke(this, new Object[] {null});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public TransparentListView(Context context) {
super(context);
this.makeTransparent();
}
public TransparentListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.makeTransparent();
}
public TransparentListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.makeTransparent();
}
}
Использовать его в XML следующим образом:
<com.myapp.TransparentListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:transcriptMode="alwaysScroll"
android:layout_weight="1"
android:dividerHeight="0dip"
android:divider="#00000000"
android:cacheColorHint="#00000000"
/>