2015-06-24 6 views
1

Я пытаюсь использовать Home Key Locker https://github.com/shaobin0604/Android-HomeKey-Locker Я хочу, чтобы можно было обнаружить и предотвратить нажатие кнопки главного экрана на экране блокировки. В большинстве ответов упоминалось, что он не может быть отключен.Получение ожидаемого ресурса ошибки типа attr

Это HomeKeyLocker Класс:

package com.example.harshilshah.screenonoff; 

    import android.app.Activity; 
    import android.app.AlertDialog; 
    import android.os.Bundle; 
    import android.view.Gravity; 
    import android.view.MotionEvent; 
    import android.view.WindowManager; 
    import android.widget.FrameLayout; 

    import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 
    import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 
    import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 


public class HomeKeyLocker { 
private OverlayDialog mOverlayDialog; 

public void lock(Activity activity) { 
    if (mOverlayDialog == null) { 
     mOverlayDialog = new OverlayDialog(activity); 
     mOverlayDialog.show(); 
    } 
} 

public void unlock() { 
    if (mOverlayDialog != null) { 
     mOverlayDialog.dismiss(); 
     mOverlayDialog = null; 
    } 
} 

    public static class OverlayDialog extends AlertDialog { 

    public OverlayDialog(Activity activity) { 
     super(activity, R.style.OverlayDialog); 
     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.type = TYPE_SYSTEM_ERROR; 
     params.dimAmount = 0.0F; // transparent 
     params.width = 0; 
     params.height = 0; 
     params.gravity = Gravity.BOTTOM; 
     getWindow().setAttributes(params); 
     getWindow().setFlags(FLAG_SHOW_WHEN_LOCKED | FLAG_NOT_TOUCH_MODAL, 0xffffff); 
     setOwnerActivity(activity); 
     setCancelable(false); 
    } 

    public final boolean dispatchTouchEvent(MotionEvent motionevent) { 
     return true; 
    } 

    protected final void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     FrameLayout framelayout = new FrameLayout(getContext()); 
     framelayout.setBackgroundColor(0); 
     setContentView(framelayout); 
    } 
    } 
} 

Это styles.xml

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="windowActionBar">false</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

<style name="OverlayDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowIsTranslucent">false</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

</resources> 

Я получаю сообщение об ошибке ожидаемый ресурс типа Attr в следующих строках

public OverlayDialog(Activity activity) { 
     super(activity, R.style.OverlayDialog);//ERROR 

Как это решить?

ответ

0

У меня только была эта проблема. Для меня это вызвало то, что я импортировал android.R class, а не класс R, уже определенный в моем приложении. Поэтому он не использовал styles.xml, определенный в значениях моего приложения, где был реализован OverlayDialog, но стандартный, определенный в системе Android, который, очевидно, не имел его. Как только я удалил import android.R и добавил import com.example.myapp.R, он работал отлично.