2014-10-06 88 views
0

我发现这个最优秀的解决方案,我想在这里解决的具体问题:的Android的FrameLayout前景setAlpha不工作

Blur or dim background when Android PopupWindow active

但是,我不能让父视图通过设置阿尔法暗淡。我正在使用矩形形状,因为解决方案建议Drawable是一个GradientDrawable。以下是我正在使用的代码:

   @Override 
       public void onViewPhoto(PostObject item) { 
        rootView.getForeground().setAlpha(220); 
        rootView.invalidate(); 
        PhotoPopup pp = new PhotoPopup(getActivity(), rootView, item.getObject_Id()); 
        pp.show(); 
        rootView.getForeground().setAlpha(0); 
        rootView.invalidate(); 
       } 

上面的代码位于将承载弹出窗口的父代片段中。它通过自定义回调调用。当用户点击列表视图项中的照片时,该调用由ArrayAdapter派生适配器完成。

我试过这两个KitKat(华硕备忘录垫)和果冻豆(三星Galaxy Tab 2) 任何想法?

出于完整性:这里的布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/streamList_rootFrame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:foreground="@drawable/shape_dim_window" > 

    <ListView 
     android:id="@+id/streamList_listview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </ListView> 

</FrameLayout> 

而且本身的形状:

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    <solid android:color="#000000" /> 
</shape> 

回答

0

您可以通过使用android:theme="@android:style/Theme.Dialog"做使用DIALOG。 创建活动,并在您AndroidManifest.xml活动定义为:

<activity android:name=".activity.YourActivity" 
android:label="@string/your_activity_label" 
android:theme="@android:style/Theme.Dialog"> 

这将创建一个popup和你的背景将是暗淡的。

+0

非常感谢您的快速响应。这可能是我必须考虑的事情,但是,我已经在我正在使用的解决方案中投入了大量代码,并且我很想知道为什么我所做的不工作。如果可能的话,我希望能够进行简单的修复。 – psparago 2014-10-06 13:31:08

+0

我同意这个答案......在'FrameLayout'中包装'ListView'不仅更加复杂,而且最终效率会更低(GPU需要画两倍的像素......一次前景框架布局和列表视图)。如果您使用半透明的活动对话框,GPU将能够优化这种背景淡化效果。 – 2014-10-06 15:46:03

+0

我猜想一些背景已丢失。我已经走下了对话路线,并且为了我想要做的事情,它不能很好地工作。我选择了弹出式窗口,因为它在移动,移动等方面似乎更好地移动,投掷等。这是一个特殊需求导向的应用程序,所以平滑运动是必不可少的我无法从对话中获得相同的动作和手势表现。 – psparago 2014-10-06 19:20:48