2016-11-30 8 views
0

Итак, у меня есть приложение для фильтра nightmode, которое имеет прозрачную активность в mainactivity, а в середине экрана есть кнопка, которая должна менять прозрачную активность на черный «Фильтр экрана» для ночного режима. Проблема, с которой я столкнулась, - Многое задано, если кто-то отвечает W/System.err: java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.view.View.setBackgroundColor (int)' на нулевой ссылке объекта W /System.err: at com.example.kenert.allinoneapp.Nightmode.turnNightOn (Nightmode.java:91) W/System.err: at com.example.kenert.allinoneapp.Nightmode.nightmodeButtonClicked (Nightmode.java:78) Вт/System.err: в java.lang.reflect.Method.invoke (нативный метод) Вт/System.err: в java.lang.reflect.Method.invoke (Method.java:372)Прозрачный цвет NullpointerException

Mainactivity код:

import android.content.Intent; 
import android.graphics.Color; 
import android.provider.Settings; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.ImageButton; 
import android.widget.SeekBar; 

public class Nightmode extends AppCompatActivity { 
    private boolean nightmodeOnOff; 
    public ImageButton modeOnOffButton; 
    private int brightness; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     startActivity(new Intent(this,NightmodeFilter.class)); 
     setContentView(R.layout.activity_nightmode); 

     modeOnOffButton = (ImageButton) findViewById(R.id.nightmodeOnOffButton); 
     nightmodeOnOff = false; 


     int prog; 
     //Seekbar 
     SeekBar skbar = (SeekBar) findViewById(R.id.nightModeBar); 
     skbar.setMax(255); 
     skbar.setKeyProgressIncrement(127); 

     try { 
      brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     skbar.setProgress(brightness); 

     skbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { 
       if (progress <= 25) { 
        brightness = 25; 
       } else { 
        brightness = progress; 
       } 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
       android.provider.Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); 
       WindowManager.LayoutParams lpp = getWindow().getAttributes(); 
       lpp.screenBrightness = brightness/(float)255; 
       getWindow().setAttributes(lpp); 
      } 
     }); 

    } 


    public void nightmodeButtonClicked(View view) { 
     try { 
      if (nightmodeOnOff) { 
       nightmodeOnOff = false; 

       turnNightOff(); 
      } else { 
       nightmodeOnOff = true; 
       turnNightOn(); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void turnNightOn() { 

     try { 
      modeOnOffButton.setImageResource(R.drawable.nightmodeonbutton); 

      findViewById(R.id.activity_nightmode_filter).setBackgroundColor(Color.parseColor("#99000000")); 



     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void turnNightOff() { 

     try { 
      modeOnOffButton.setImageResource(R.drawable.nightmodeonoffbutton); 
      findViewById(R.id.activity_nightmode).setBackgroundColor(0x66000000); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     turnNightOff(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     turnNightOff(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     turnNightOff(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     turnNightOff(); 
    } 
} 

Прозрачный код активность:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Window; 
import android.view.WindowManager; 

public class NightmodeFilter extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Window window = getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); 
     setContentView(R.layout.activity_nightmode_filter); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 
} 

Прозрачная активность XML и тема:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:theme="@style/Theme.Transparent" 
    android:id="@+id/activity_nightmode_filter" 
    android:layout_height="wrap_content" 
    android:background="@color/Transparent" 





    tools:context="com.example.kenert.allinoneapp.NightmodeFilter" 
    android:layout_width="match_parent" 
    android:orientation="horizontal"> 


</LinearLayout> 

Тема:

<style name="Theme.Transparent" parent="Theme.AppCompat.DayNight.NoActionBar"> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowBackground">@android:color/transparent</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowNoTitle">true</item> 

     <item name="android:backgroundDimEnabled">false</item> 

    </style> 
+0

findViewById (R.id.activity_nightmode_filter) .setBackgroundColor (Color.parseColor ("# 99000000")) Это строка, которая получает ошибку. – Kenertj

ответ

0

Я не думаю, что основным видом деятельности имеют видимость на " activity_nightmode_filter ", не можете ли вы поместить эту функцию в свою активность NightmodeFilter?

0

Проблема в том, что представление, на которое вы пытаетесь получить ссылку, является видом активности, поэтому, когда вы вызываете findViewById, он возвращает нулевую ссылку.

Один из способов изменить цвет активности фона, как это: в методе onCreate, после того, как вы звоните setContentView(R.layout.activity_nightmode);, получить decorView и установить цвет фона:

getWindow().getDecorView().setBackgroundCo‌​lor(Color.parseColor‌​("#99000000")) 
0

Любые новые идеи, будут appriciated. У меня была идея, что, если бы я сделал прозрачную кнопку изображения в прозрачной активности, нажала бы кнопка щелкнуть цвет фона без ошибки?

Смежные вопросы