問題がありました。setMeasuredDimension を (1,1) で設定すると、黒画面になります。(後ろ姿を探しているのですが、(1,1)画面切り替えを黒に設定した場合)setMeasuredDimensionを(2,2)に設定した場合、動作に問題はありません。理由を教えてください。
それについてコールスタックをトレースすると、アプリが実行されてcustomView2が表示されているときに、RenderNode.javaのnSetHasOverlappingRendering関数がtrueで呼び出され、テレビが黒い画面に設定されていることに気付きました。
これは androidTV でテストされており、以下はビルド情報です。compileSdkVersion : 28 minSdkVersion : 28 targetSdkVersion : 28
ありがとうございます。
-- MainActivity --(これはテスト用です)
public class MainActivity extends Activity {
testCustomView2 testCustomView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testCustomView = new testCustomView2(getApplicationContext());
WindowManager mWindowManager = (WindowManager)
getApplication().getSystemService(Context.WINDOW_SERVICE);
if (mWindowManager != null) {
WindowManager.LayoutParams wmparams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.OPAQUE);
wmparams.gravity = Gravity.TOP | Gravity.START;
mWindowManager.addView(testCustomView, wmparams);
}
}
}
--testCustomView2 (これはテスト用です)--
public class testCustomView2 extends View{
Context mContext;
public testCustomView2(Context context){
super(context);
mContext = context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
this.setMeasuredDimension(1, 1);
}
}
-- activity_main.xml (res/layout) --
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_frame"
android:background="@android:color/transparent"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>