アクティビティはテーマを動的に設定します

アクティビティはテーマを動的に設定します

android:theme と setTheme() は透明効果を異なる方法で設定します

1.マニフェストにテーマを設定する

1. アプリケーションのテーマを設定し、android:theme="@android:style/Theme.Translucent.NoTitleBar" を追加します

2.アクティビティのテーマを設定する

android:theme="@android:style/Theme.Translucent.NoTitleBar" を追加します

アクティビティのテーマが書き換えられない限り、アプリケーションのテーマはデフォルトでグローバルです

2.コードでテーマを動的に設定する

キーメソッド: setTheme(int resId)

このメソッドは Activity のメソッドです

1.setTheme は super.onCreate() setTheme(...);super.onCreate(savedInstanceState);setContentView(R.layout.Default);effective の前に記述する必要があります

2.setTheme は、super.onCreate() と setContentView() の間に記述する必要があります。 super.onCreate(savedInstanceState);setTheme(...);setContentView(R.layout.my_layout);effective

3. setContentView() の後、setTheme は無効です。

デフォルトで onCreate の前に呼び出される setTheme メソッドを直接オーバーライドできます。

setTheme->onCreate

3. 問題は、透明なテーマを設定するときに setTheme の呼び出しが無効であることです。

2番目の方法で透明テーマを設定すると、問題が発生します.テーマ設定は効果がなく、機能しません-_-

この現象は次のように要約できます。

  1. アクティビティが動的にテーマ化されている場合、透明なテーマを設定することはできません。

  2. テーマがアクティビティによって動的に設定される場合、一般的なテーマを設定することができます。

  3. アクティビティマニフェストに設定されたテーマが透明の場合、動的にテーマを設定することが可能

  4. アクティビティ マニフェストに設定されたテーマが透明でない場合、テーマを動的に透明に設定することはできません

上記の問題の解決策

1. AndroidMainfest.xml で透過テーマを設定する

android:theme=“@android:style/Theme.Translucent.NoTitleBar”

2. Activity で setTheme メソッドを呼び出す

上記の問題の解決策

1. AndroidMainfest.xml で透過テーマを設定する

android:theme=“@android:style/Theme.Translucent.NoTitleBar”

Android の暗黙的なスタートアップ マッチングの原則

1. インテントには 1 つのアクションのみを含めることができ、複数のカテゴリを含めることができます。

2. マニフェスト ファイル内のアクティビティは、複数の IntentFilter で構成でき、IntentFilter には複数の IntentFilter を含めることができます。

アクション、複数のカテゴリ、ただしデータは 1 つしか含めることができません。

3. Intent に Action が含まれる場合、IntentFilter には複数の Action が含まれます。Intent 内の Action が IntentFilter 内の任意の Action と一致する限り、一致は成功します。

4. Intent にカテゴリが含まれている場合、これらのカテゴリは、intentFilter 内のカテゴリのサブセットに属している必要があります. IntentFilter で構成されているカテゴリの数に関係なく、Intent は、一致するサブセット内のカテゴリの数を保持するだけで済みます.

PS: IntentFilter には次が含まれている必要があります: categoryandroid:name="android.intent.category.DEFAULT"/既定のカテゴリは、暗黙のインテントを使用してインテントに追加されるため、つまり、上の図のような上の図のカテゴリ値です。が IntentFilter カテゴリに追加されず、マッチングが失敗し、android.content.ActivityNotFoundException: No Activity found to handle Intent { act=xxxxxxxx } という例外がポップアップしますが、このデフォルトのカテゴリが必要ない理由がよくわかりませんエントリ内のActivity. あるといいのですが、ご存知でしたら言及できます.

5. マニフェスト ファイル内のアクティビティに対して複数の IntentFilter が構成されている場合、Intent は IntentFilter の 1 つのコンテンツと一致するだけでよく、複数の IntentFilter 間で一致することはできません。

6. Data には、Scheme、Host、Port、Path、Type の 5 つの部分があります. Data と Type in Intent は別々に設定され、設定順序の後に Type または Data が設定され、以前に設定された Data または Type が上書きされます. make Intent Data と Type を共存させるには、setDataAndType(Uri data, String type); API を使用して同時に設定する必要があります。Intent の Data の 5 つのコンポーネントは、一致する IntentFilter の 5 つのコンポーネントである必要があります。

OPENGL

xml で GLSurfaceView を参照できません

<GLSurfaceView

android:id="@+id/gl_view"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

原因: java.lang.ClassNotFoundException: パスにクラス "android.view.GLSurfaceView" が見つかりませんでした: DexPathList[[zip ファイル "/data/app/jun.opgl-2/base.apk"],nativeLibraryDirectories=[ /data/app/jun.opgl-2/lib/arm64、/vendor/lib64、/system/lib64]]

<android.opengl.GLSurfaceView

android:id="@+id/gl_view"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

java.lang.NullPointerException: null オブジェクト参照で仮想メソッド 'void android.opengl.GLSurfaceView$GLThread.surfaceCreated()' を呼び出そうとしています

解決策 呼び出し時に setRenderer を忘れないでください

setContentView(R.layout.activity_main);

mGLView = (GLSurfaceView) findViewById(R.id.gl_view);

mGLView.setRenderer(新しい GLSurfaceView.Renderer());

GLES2.0 にはパーミッションが必要です

おすすめ

転載: blog.csdn.net/Jun_P/article/details/127038090