線形レイアウトのホームスクリーン ウィジェットがあります。リモート ビューを使用して実行時に背景にアルファを設定しようとしていますが、ウィジェットが読み込まれません。
私はこれを使用しています:
remoteView.setFloat(R.id.widget_background, "setAlpha", (float)0.7);
背景色またはテキスト色を同じ方法で設定すると機能します。リモート ビューを使用して背景の透明度を設定するにはどうすればよいですか?
線形レイアウトのホームスクリーン ウィジェットがあります。リモート ビューを使用して実行時に背景にアルファを設定しようとしていますが、ウィジェットが読み込まれません。
私はこれを使用しています:
remoteView.setFloat(R.id.widget_background, "setAlpha", (float)0.7);
背景色またはテキスト色を同じ方法で設定すると機能します。リモート ビューを使用して背景の透明度を設定するにはどうすればよいですか?
<?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="wrap_content"
android:orientation="vertical"
android:background="@android:color/transparent">
<ImageView
android:id="@+id/widget_image"
android:layout_width="110sp"
android:layout_height="110sp"
android:layout_gravity="center"
android:src="@drawable/flashlight1" />
</LinearLayout>
レイアウトの背景を透明に設定するだけです。以下のコードを追加します。これは私のために働いた。
android:background="@android:color/transparent"
1.Style.xml を使用して、以下のように背景を透明にすることができます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
このファイルをウィジェットのテーマとして設定します。または 2. 次のように # 記号の後に 80 を入れてください:#80000000 役に立てば幸いです..色なしで背景に #80FFFFFF を使用できます.コードで試したことはありませんが、役立つかもしれません.
次のソリューションを使用しました。
float opacity = 0.3f; //opacity = 0: fully transparent, opacity = 1: no transparancy
int backgroundColor = 0x000000; //background color (here black)
remoteView.setInt( R.id.loMain, "setBackgroundColor", (int)(opacity * 0xFF) << 24 | backgroundColor);
loMainは私のウィジェットのメインレイアウトです
ウィジェットのメイン レイアウトが角の丸い形状の背景 (例: android:background="@drawable/shape_transparent") を使用している場合、より複雑な解決策は次のとおりです。
float transparency = 0.5f; //0...1
long colorFilter = 0x01000000L * (long)(255f * transparency);
try {
final Method[] declaredMethods = Class.forName("android.widget.RemoteViews").getDeclaredMethods();
final int len = declaredMethods.length;
if (len > 0) {
for (int m=0; m<len; m++ ) {
final Method method = declaredMethods[m];
if (method.getName().equals("setDrawableParameters")) {
method.setAccessible(true);
method.invoke(remoteView, R.id.loMain, true, -1, (int)colorFilter, PorterDuff.Mode.DST_OUT, -1);
break;
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
必要に応じて、変数alfaとcolorFilterをいじることができます。