设置RelativeLayout背景以匹配壁纸图像

时间:2016-05-27 02:51:19

标签: android android-relativelayout setbackground

我在屏幕顶部有一个相对布局(例如在状态栏的顶部),我希望它的背景图像与底层系统壁纸相同。这样做没有问题:

public class MainActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        WindowManager window_manager=(WindowManager)getSystemService(WINDOW_SERVICE);
        WindowManager.LayoutParams params=new WindowManager.LayoutParams();
        WindowManager.LayoutParams window_manager_layout_params=new WindowManager.LayoutParams(
            params.FILL_PARENT,
            100,
            params.TYPE_SYSTEM_ERROR,
            params.FLAG_WATCH_OUTSIDE_TOUCH|
            params.FLAG_NOT_FOCUSABLE|
            params.FLAG_LAYOUT_IN_SCREEN,
            PixelFormat.TRANSLUCENT);
        window_manager_layout_params.gravity=Gravity.TOP;
        RelativeLayout rl=new RelativeLayout(this);
        WallpaperManager wpm =WallpaperManager.getInstance(this);
        Drawable d=wpm.getDrawable();
        rl.setBackgroundDrawable(d);
        window_manager.addView(rl,window_manager_layout_params);
    }
}

问题是,如何设置相对布局的背景可绘制以完全匹配相对布局背后的壁纸部分? (没有伸展和完全相同的位置)。

注意:要使代码正常工作,您需要为清单添加警报窗口权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

example of relative layout with wallpaper background

修改:更清晰:

它应该如下所示: after

但实际上它看起来像这样: before

2 个答案:

答案 0 :(得分:0)

您可以尝试将RelativeLayout和状态栏的背景颜色设置为透明。然后,您可以在RelativeLayout中设置另一个布局,并在父布局上放置paddingTop,其高度与状态栏相同。

答案 1 :(得分:0)

您应该使用Transparent Activity来实现您的要求,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>

然后,您可以在图片中显示的顶部栏中设置纯色背景颜色,然后您应该只看到屏幕的可见部分transparent

另一个选项是根据您的顶栏Bitmap裁剪墙纸height