2016-12-14 1 views
0

Also hier ist das Problem, ich versuche, ein Overlay zu machen, das Daten aus der Hauptanwendung zeigt, die App läuft ohne Fehler, aber es zeigt nicht die Daten .Android Studio - Informationen von Hauptaktivität in Overlay-Aktivität anzeigen

Main.java: Dies ist die Haupt-App, wo alle Daten und andere Dinge passieren.

package com.schnetzapps.myapplication; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.CompoundButton; 
import android.widget.EditText; 
import android.widget.Switch; 
import android.widget.TextView; 

public class Main extends Activity { 
    Switch toggleOverlaySwitch; 
    TextView overlayLabel; 
    EditText testText; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTheme(R.style.AppTheme); 
     setContentView(R.layout.activity_main); 

     LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View vi = inflater.inflate(R.layout.overlay, null); 
     overlayLabel = (TextView) vi.findViewById(R.id.overlayLabel); 
     toggleOverlaySwitch = (Switch) findViewById(R.id.openOverlay); 

     toggleOverlaySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       toggleService(); 
       testText = (EditText) findViewById(R.id.testText); 
       overlayLabel.setText(testText.getText()); 
       testText.setText(overlayLabel.getText()); 
      } 
     }); 
    } 

    private void toggleService(){ 
     Intent intent = new Intent(this, OverlayService.class); 
     if(!stopService(intent)){ 
      startService(intent); 
     } 
    } 
} 

Overlay.java: Dies ist ein Overlay entwickelt, um die Benutzerinformationen zu zeigen, wie es egal ändert, was andere Anwendungen offen sein können. Paket com.schnetzapps.myapplication;

 import android.app.Service; 
     import android.content.Intent; 
     import android.graphics.Color; 
     import android.graphics.PixelFormat; 
     import android.os.IBinder; 
     import android.view.View; 
     import android.view.WindowManager; 
     import android.widget.LinearLayout; 

public class Overlay extends Service { 

    LinearLayout oView; 

    @Override 
    public IBinder onBind(Intent i) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     oView = new LinearLayout(this); 
     int col = Color.parseColor("#4286f4"); 
     oView.setBackgroundColor(col); 
     int width = 500; 
     int height = 500; 
     int x = 0; 
     int y = 0; 
     WindowManager.LayoutParams params = new WindowManager.LayoutParams(width, height, x, y, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
         WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
         WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT); 
     WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
     LinearLayout layout = (LinearLayout) View.inflate(this, R.layout.overlay, null); 
     oView.addView(layout); 
     wm.addView(oView, params); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if(oView!=null){ 
      WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
      wm.removeView(oView); 
     } 
    } 

} 

activity_main.xml: Dies ist das Design der Haupt-App.

overlay.xml: Dies ist das Overlay-Design mit der Bezeichnung, die ich versuche, den Text zu setzen.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/overlayLayout" > 
     <TextView 
      android:text="TextView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/overlayLabel" /> 
    </RelativeLayout> 
</LinearLayout> 

Ich bin keine NULL-Verweis Ausnahmen immer die besagt, dass ich an die falsche Textview bin zeigen und das Overlay ist Makeln schön wie erforderlich, warum ist der Text auf das Overlay nicht ändern, was in der eingegeben wurde EditTextfeld?

Screenshots Das Overlay wird nicht als auf umgeschaltet, so dass die Überlagerung nicht sichtbar ist: enter image description here

Die Overlay-Option aktiviert ist wurde, aber der Textview zeigt nicht den Text aus dem EditText: enter image description here

Ich bin sicher, ich vermisse etwas dummes ... jede Eingabe wird sehr geschätzt.

Antwort

0

Nach einigen Hantieren entdeckte ich, dass die Lösung natürlich ist das Intent-System: intent.putExtra(key, value); und intent.getStringExtra(key);

In meinem obigen Code ich den folgenden Code geändert:

private void toggleService(){ 
    Intent intent = new Intent(this, OverlayService.class); 
    if(!stopService(intent)){ 
     startService(intent); 
    } 
} 

der Intention Putter sind :

private void toggleService(String key, String value){ 
    Intent intent = new Intent(this, OverlayService.class); 
    intent.putExtra(key, value); 
    if(!stopService(intent)){ 
     startService(intent); 
    } 
} 

Und im Overlay Service, ich die meisten der Code ändern, damit es so aussieht jetzt:

package com.schnetzapps.myapplication; 

     import android.app.Service; 
     import android.content.Intent; 
     import android.graphics.Color; 
     import android.graphics.PixelFormat; 
     import android.os.IBinder; 
     import android.view.View; 
     import android.view.WindowManager; 
     import android.widget.LinearLayout; 
     import android.widget.TextView; 

public class OverlayService extends Service { 
    String data; 
    LinearLayout oView; 

    @Override 
    public IBinder onBind(Intent i) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

    public int onStartCommand (Intent intent, int flags, int startId) { 
     data = intent.getStringExtra("testText"); 
     RunOverlay(); 
     return START_STICKY; 
    } 

    void RunOverlay() { 
     oView = new LinearLayout(this); 
     int col = Color.parseColor("#4286f4"); 
     oView.setBackgroundColor(col); 
     int width = 500; 
     int height = 500; 
     int x = 0; 
     int y = 0; 
     WindowManager.LayoutParams params = new WindowManager.LayoutParams(width, height, x, y, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
         WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
         WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT); 
     WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
     LinearLayout layout = (LinearLayout) View.inflate(this, R.layout.overlay, null); 

     oView.addView(layout); 
     TextView t = (TextView)oView.findViewById(R.id.overlayLabel); 
     t.setText(data); 
     wm.addView(oView, params); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if(oView!=null){ 
      WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
      wm.removeView(oView); 
     } 
    } 
} 

Das Ergebnis ist natürlich, dass das Overlay-Fenster den Text aus dem EditText-Feld anzeigt, wenn das Umschalten geändert wird.

enter image description here

Verwandte Themen