Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Possible to inflate an XML layout in a Service? (Android)

I want to inflate an xml layout in a service. How do you do this? I tried to use inflater and Window Manager but I think it don't work. Any tactics on this? Thanks.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/main"
>
    <LinearLayout
        android:id="@+id/top"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal"
        >


    <FrameLayout
        android:id="@+id/topLeft"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:tag="topLeft"
        android:layout_weight="1.0"
        android:background="#ff3d38"></FrameLayout>


    <FrameLayout
        android:id="@+id/topRight"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:tag="topRight"

    android:layout_weight="1.0"
        android:background="#fff839"></FrameLayout>

    </LinearLayout>

<LinearLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:orientation="horizontal"
    android:id="@+id/bottom"
    >

<FrameLayout
        android:id="@+id/bottomLeft"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:layout_weight="1.0"
        android:background="#1e22ff">

    </FrameLayout>

    <FrameLayout
        android:id="@+id/bottomRight"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:layout_weight="1.0"
        android:background="#32ff1f"></FrameLayout>

This is my Service Code for the xml to be displayed.

package com.toksis.pvscreen;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;


public class DragDropButtonMainService extends Service {
private LinearLayout main;
private LinearLayout firstLayer;
private LinearLayout secondLayer;
private FrameLayout  vTopLeft;
private FrameLayout  vTopRight;
private FrameLayout  vBottomLeft;
private FrameLayout  vBottomRight;



private Button mainButton;
private ViewGroup mView;
private LayoutInflater inflater;

public IBinder onBind(Intent intent) {
    return null;
}


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

    createDragDropLayout();



}



void createDragDropLayout(){

   mainButton = new Button(this);
   mainButton.setText("Main");


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




   WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

   inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   mView =  (ViewGroup) inflater.inflate(R.layout.dragdroplayout, null);


   vTopLeft   = (FrameLayout) mView.findViewById(R.id.topLeft);
   vTopRight  = (FrameLayout)  mView.findViewById(R.id.topRight);
   vBottomLeft = (FrameLayout) mView.findViewById(R.id.bottomLeft);
   vBottomRight= (FrameLayout) mView.findViewById(R.id.bottomRight);
   firstLayer = (LinearLayout) mView.findViewById(R.id.top);
   secondLayer = (LinearLayout) mView.findViewById(R.id.bottom);

   //    main = (LinearLayout) mView.findViewById(R.id.main);

  //        main.addView(firstLayer);
  //      main.addView(secondLayer);


 //    firstLayer.addView(vTopLeft);
 //           firstLayer.addView(vTopRight);

 //         secondLayer.addView(vBottomLeft);
//       secondLayer.addView(vBottomRight);

  // wm.addView(mainButton, params);
     wm.addView(mView,params);

   Log.d("tok", "add mview");


   }
}
like image 726
The One Avatar asked Oct 23 '13 11:10

The One


People also ask

How will you inflate a layout in Android?

inflate(R. layout. custom_button, mLinearLayout, true); We specified that we want to inflate the Button from its layout resource file; we then tell the LayoutInflater that we want to attach it to mLinearLayout .

What does it mean to inflate a layout in Android?

Layout inflation is the term used within the context of Android to indicate when an XML layout resource is parsed and converted into a hierarchy of View objects.

What is the use of inflate in Android?

inflate. Inflate a new view hierarchy from the specified xml resource. Throws InflateException if there is an error. ViewGroup : Optional view to be the parent of the generated hierarchy.

What is inflate layout?

"Inflating" a view means taking the layout XML and parsing it to create the view and viewgroup objects from the elements and their attributes specified within, and then adding the hierarchy of those views and viewgroups to the parent ViewGroup.


1 Answers

it is possible to place a graphic on the service the code is this:

li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                //WindowManager.LayoutParams.TYPE_INPUT_METHOD |
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,// | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.RIGHT | Gravity.TOP;
        myview = li.inflate(R.layout.traslucent, null);     

        wm.addView(myview, params);
like image 103
Mayank Avatar answered Nov 01 '22 11:11

Mayank