I am getting this error,
"Attempt to invoke virtual method 'android.view.View
android.view.View.getRootView()' on a null object reference"
Here is my code.
black.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View bView = findViewById(R.id.lin);
View root = bView.getRootView();
root.setBackgroundColor(Color.parseColor("#000000"));
}
});
I have two views, one called overlay_view and the other activity_main. I am trying to change the color of overlay_view but I am getting this error. I have the setcontentView to activity_main, and if I switch it to overlay_view it does not give me a error. However I do not want to switch the setContentView to overlay_view so is there another way to do this? Thanks
Edit:
I have a service which adds in overlay_view. The service is called from the mainactivity. Here is where it is called from in the main activity:
public void sendMessage(){
Intent intent = new Intent(this, DrawOverAppsService.class);
startService(intent);
Intent intent1 = new Intent(this, MainActivity.class);
}
And here is the service:
public class DrawOverAppsService extends Service {
public static final String TAG = "DrawOverAppsService";
View mOverlayView;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_DIM_BEHIND,
PixelFormat.TRANSLUCENT);
// An alpha value to apply to this entire window.
// An alpha of 1.0 means fully opaque and 0.0 means fully transparent
params.alpha = 0.1F;
// When FLAG_DIM_BEHIND is set, this is the amount of dimming to apply.
// Range is from 1.0 for completely opaque to 0.0 for no dim.
params.dimAmount = 0.9F;
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mOverlayView = inflater.inflate(R.layout.overlay_view, null);
wm.addView(mOverlayView, params);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
wm.removeView(mOverlayView);
}
}
This is the xml for overlay_view:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF4081"
android:orientation="vertical"></LinearLayout>
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…