2016-07-23 22 views
0

Im Dienst für die Anzeige der benutzerdefinierten Ansicht über alle Fenster muss ich onClick Listener einstellen.Android: Wie man OnCick Listener zu benutzerdefinierten Layout, das mit dem WINDOW_SERVICE als Floating-Fenster angezeigt wird, festlegen?

Ich habe versucht, Button Lister von Inflater aber ohne Glück zu erstellen. Was ist der richtige Ansatz, um Klickereignis-Listener für ausgewählte Schaltflächen nach Schaltflächen-ID festzulegen?

Vielen Dank für jede Beratung.

Antwort

-1

Android kann Tricks anwenden, was Ihrer Meinung nach funktionieren könnte, aber nicht.

Erstens, was ich normalerweise tue ist von onCreate() Ich rufe an: InitializePage(); wo ich dann meinen ganzen Initialisierungscode ablege. Es ist nur mein Stil.

Dann in meiner InitializePage() Funktion initialisiere ich die Schaltfläche, dann geben Sie den OnClickListener. Ich benutze Android Studio mit Intellisense, so dass es den Code für mich schreibt ....

 mSendButton = (TextView)findViewById(R.id.send_button1); 
     mSendButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     {..... 
      }); 

Es sollte so einfach sein. Viel Glück

+0

Aber wie kann ich den Zugriff auf findViewById in Dienst? dies oder mContext = das; funktioniert nicht. – redrom

0

Gelöst den folgenden Code verwenden, die Werke im Dienst ist gut:

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

    mContext = this; 


    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

    final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mParentLayout = (LinearLayout) inflater.inflate(R.layout.result_layout, 
      null); 

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 

    params.gravity = Gravity.TOP | Gravity.LEFT; 
    params.x = 0; 
    params.y = 100; 

    windowManager.addView(mParentLayout, params); 


    Button b = (Button) mParentLayout.findViewById(R.id.closeButton); 
    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      windowManager.removeView(mParentLayout); 
     } 
    }); 

} 

Inspiriert von:

Could not get Touch event for TYPE_SYSTEM_OVERLAY