As the title suggests, a LinearLayout
in my app flickers randomly. It is hard to replicate and hard to get a screenshot at the same time. So please bear with me. I could only capture it by taking a picture. Here is the expected behavior of the LinearLayout (Notice the white box below the red header):
Now here is the same page with LinearLayout where the white background disappears:
There are two cases when this happens. First, after the page loads completely. Second, when doing drag events on the smiley faces.
To fix it, I tried to use the Android Studio's code analysis feature to get suggestions on how to further optimize this page's xml layout. The suggestions it gave were: Missing contentDescription
attribute on image, alignment options to support right-to-left layouts, set baselineAligned="false"
on LinearLayout for better performance.
I added the baselineAligned="false"
option for all my LinearLayouts but nothing happened.
In previous posts here in SO, this is the closest I could get. However those cache
options for LinearLayout doesn't seem to help. Do you think LinearLayout has optimizations too like what ListView have as described here? Most importantly, how can I solve the issue?
EDIT:
root.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mWindowManager.updateViewLayout(mRootView,
mLayoutParams);
}
});
To give more context, this app was implemented with services that has UI. The page in the screenshot is a service. (Please don't ask my why. I just joined the team and the original programmer already left.)
UPDATE: I found the issue! Hooray! So when the page loads, the first textbox automatically gets the focus. When I disabled the autofocus on my text field, the issue no longer happens. Can someone please tell me why?
I don't know but adding android:focusableInTouchMode="true"
helped. I added this for my layouts which has editable fields in them such as
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
...
<EditText
android:id="@+id/editText"
android:layout_width="100dp"
android:layout_height="wrap_content" />
...
</LinearLayout>