2016-05-27 11 views
1

Ich habe ein relatives Layout oben auf dem Bildschirm (z. B. oben auf der Statusleiste) und ich möchte es Hintergrundbild das gleiche wie das zugrunde liegende System Hintergrundbild haben. Das ist kein Problem, indem Sie:set RelativeLayout Hintergrund zum passenden Hintergrund Bild

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); 
    } 
} 

Das Problem ist, wie kann ich den Hintergrund ziehbar der relativen Layout festlegen können genau den Teil der Tapete hinter dem relativen Layout passen? (keine Dehnung und genau die gleiche Position).

HINWEIS: Um den Code zum Laufen zu bringen, müssen Sie die Berechtigung für Alarmfenster auf das Manifest hinzufügen:

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

example of relative layout with wallpaper background

Edit:

es soll: mehr klar sein, sieht so aus: after

aber tatsächlich sieht es so aus: before

+0

Wie das Bild suggeriert, würde Ihr relativerLayout-Hintergrund nicht auf "TRANSPARENT" setzen, um das Problem zu lösen? – RafaelC

+0

Nicht wirklich, denn hinter dem relativen Layout ist die Statusleiste, ich habe die Frage aktualisiert, vergessen, dies vor – newUser

+0

@RafaelCardoso zu erwähnen: auch jede andere Position würde nicht garantieren, das Hintergrundbild zu sehen, wenn ich das backrgound auf transparent setze, wenn es andere gibt windows/icons, ... im Hintergrund – newUser

Antwort

0

Sie können versuchen, die Hintergrundfarbe von RelativeLayout und die Statusleiste auf transparent einzustellen. Dann können Sie ein anderes Layout innerhalb der RelativeLayout haben und eine paddingTop auf das übergeordnete Layout setzen, das dieselbe Höhe wie die Statusleiste hat.

+0

Wie ich in der Frage sagte, ich möchte das relative Layout hat das System Hintergrundbild als Hintergrund, an der gleichen Stelle. Nicht gestreckt, nicht beschnitten, nicht skaliert. Wie im obigen Beispiel sollte das relative Layout wie "unsichtbar" aussehen, indem das Hintergrundbild angezeigt wird. Alles, was sich hinter dem relativen Layout befindet, wie Icons oder andere Fenster oder in diesem Fall sollte kein Statusleisten-Text sichtbar sein. Ich weiß nicht, wie man die Position und Größe des Hintergrunds genau an das Hintergrundbild anpasst. Der Hintergrund scheint immer gestreckt zu sein – newUser

0

sollten Sie Transparent Activity verwenden, um zu erreichen, was Sie fragen, Ihre theme sollte so etwas wie dieses

<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> 

sehen Sie dann, wie zeigt, in Ihrem Bild eine solide Hintergrundfarbe auf der oberen Leiste einstellen könnte, dann sollten Sie nur sehen der sichtbare Teil des Bildschirms, der transparent ist.

Eine weitere Option ist das Beschneiden der Tapete Bitmap Basis auf Ihrer oberen Leiste height.