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");
}
}
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 .
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.
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.
"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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With