设置窗口小部件的Alpha /不透明度

时间:2012-07-26 03:12:51

标签: android android-widget xml-layout

我想设置LinearLayout背景的不透明度,我发现如果使用普通布局,这个solution工作正常,但在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();
}

}

我相应的widget 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

你能告诉我我做错了什么吗?我们将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

Android documentation中所述:您无法扩展RemoteView支持的类。因此,您无法使用AlphaLayout类。

对于任何布局背景,您可以使用ten different drawables。您希望图像透明。这(据我所知)无法完成我们的工作。

然而,这是一个良好的开端:

  • 使用LinearLayout而不是AlphaLayout。
  • 添加Shape Drawable作为其背景:android:background="@drawable/widget_background"
  • 然后,根据需要设置背景。这是一个建议:

    RES /抽拉/ 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>
    

我相信这是制作小部件布局的标准方法。祝你好运!

答案 1 :(得分:0)

您不能在主屏幕上拥有自定义视图/小部件。

与典型视图相比,主屏幕小部件中使用的RemoveView具有有限的功能。