1

の背景の不透明度を設定したいのですが、通常のレイアウトを使用する場合はこの解決策がうまく機能することLinearLayoutがわかりましたが、レイアウトを別のものに設定する必要がある場合は、次のコードを書きましたandroid-widgets

public class AlphaLayout extends LinearLayout {

public AlphaLayout (Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

public AlphaLayout (Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
protected void onAnimationStart() {
    AlphaAnimation alphax = new AlphaAnimation(0.5F, 0.5F);
    alphax.setDuration(0);
    alphax.setFillAfter(true);
    this.startAnimation(alphax);
    super.onAnimationStart();
}

}

そして、対応するウィジェットのxmlレイアウトは

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/widget_margin" >

<com.exercise.HelloWidget.AlphaLayout 
    android:id="@+id/myWidgetLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@drawable/appwidget_dark_bg"
    android:orientation="horizontal" >
    <TextView
        android:id="@+id/song_info"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:text="Hello"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/white" />

    <TextView
        android:id="@+id/timeWidget"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:text="03:30"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/white" />

    
   
</com.exercise.HelloWidget.AlphaLayout>

プロジェクトを実行した後、ホーム画面にウィジェットを追加すると、エラーが表示されますProblem loading widget

私が間違っていることを教えてもらえますか?あなたの助けに感謝します。

4

2 に答える 2

1

Android のドキュメントに記載されているとおり: でサポートされているクラスを拡張することはできませんRemoteViewAlphaLayoutしたがって、クラスを使用することはできません。

どのようなレイアウト背景でも、使用できる10 種類のドローアブルがあります。画像を透明にしたい。これは(私が知る限り)私たちが持っているものを与えることはできません.

ただし、ここから始めましょう。

  • AlphaLayout の代わりに LinearLayout を使用します。
  • 背景としてShape Drawableを追加します。android:background="@drawable/widget_background"
  • 次に、必要に応じて背景を設定します。ここに提案があります:

    res/drawable/widget_background.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/Corners">
        <gradient android:startColor="#CC111111" android:endColor="#CC7f7f7f" android:angle="45"/>
        <padding android:left="4dp" android:top="1dp" android:right="4dp" android:bottom="1dp" />
        <corners android:radius="4dp" />
        <stroke android:width="2dp" android:color="#FFAfAfAf"/>
    </shape>
    

これがウィジェットのレイアウトを作成する標準的な方法だと思います。幸運を!

于 2012-07-26T22:19:28.043 に答える