我在屏幕顶部有一个相对布局(例如在状态栏的顶部),我希望它的背景图像与底层系统壁纸相同。这样做没有问题:
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" />
修改:更清晰:
答案 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
。