标签: android-windowmanager

这4行java代码在Android应用程序中意味着什么?

在我的java应用程序中,我有这个代码

@Override
public void onAttachedToWindow()
  {
  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  super.onAttachedToWindow();
  }
Run Code Online (Sandbox Code Playgroud)

当我为Android 2.3(10级)构建它时, 它编译并正常工作.但是,当我为Android 4.0(15级)构建它时,它编译并在运行时和崩溃后让我崩溃

07-16 14:00:03.090: E/AndroidRuntime(29487): FATAL EXCEPTION: main
07-16 14:00:03.090: E/AndroidRuntime(29487): java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
Run Code Online (Sandbox Code Playgroud)

当我评论这一行,并建立它工作正常,没有问题..

//this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
Run Code Online (Sandbox Code Playgroud)

所以我不明白为什么这个代码意味着什么?

编辑: 这里有一些参考

当我在手机上运行应用程序时.版本是android 4.0.3

在安卓上的小孩安全app

java android android-emulator android-windowmanager

5
推荐指数
1
解决办法
8345
查看次数

将可聚焦视图添加到窗口管理器而不会丢失对后台的响应

我有以下问题:

我想创建一个工具栏,通过向窗口管理器添加视图来设置设备(TV)的常规设置.我的工具栏在屏幕底部可见,它是当前所选应用程序的叠加层.它有以下参数/标志:

  • WindowManager.LayoutParams.TYPE_SYSTEM_ALERT - WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL -PixelFormat.TRANSLUCENT

当我点击工具栏时它工作正常.当我点击背景时,工具栏仍处于前台,后台应用程序正常工作.

当我ListView从工具栏填充时,问题就开始了.有了这些参数,onClickonSelectItem听众不工作对ListView.当我删除时FLAG_NOT_FOCUSABLE,听众开始工作,但我不能再使用后台应用程序了.我必须关闭我的工具栏才能专注于背景.

您是否有任何想法,如何使两者ListView和后台应用程序响应?

提前谢谢,每个答案/

android android-windowmanager

5
推荐指数
1
解决办法
924
查看次数

WindowManager.LayoutParams为什么有setTitle方法?

所以昨天我正在编程,突然我setTitleWindowManager.LayoutParams课堂上遇到了这个方法,为什么这个类有这样的setTitle方法呢?在哪里使用?该文档没有说明该功能.

我的猜测是,它可以用于调试或类似的东西,但除此之外,我没有线索.

为什么它会被宣布为最终方法?因为我们尚未准备好覆盖它?

就是想...

注意:以下两个答案都是"正确"并提供良好信息的一些方法,但只能接受一个.

的getTitle

的setTitle

android layoutparams android-windowmanager

5
推荐指数
1
解决办法
415
查看次数

无法删除叠加视图

更新

我能够解决这个问题,问题是对话和相关的可以从广播接收器启动但不推荐,因为活动运行在视图之前结束。

尝试实现像 fb messenger、truecaller 等覆盖。

public class IncomingCall extends BroadcastReceiver
{
private Context pcontext;
private static final String TAG = "CustomBroadcastReceiver";
 TelephonyManager telephony;
 CustomPhoneStateListener customPhoneListener ;
@Override
public void onReceive(Context context, Intent intent) 
{
    pcontext = context;
    Bundle extras = intent.getExtras();
    if (extras != null) {
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        Log.w("DEBUG", state);

            telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            customPhoneListener = new   CustomPhoneStateListener();
            telephony.listen(customPhoneListener,   PhoneStateListener.LISTEN_CALL_STATE);
            Bundle bundle = intent.getExtras();
            String phoneNr= bundle.getString("incoming_number");


    }


}
public class CustomPhoneStateListener extends PhoneStateListener
{
    private static final …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-xml android-view android-windowmanager

5
推荐指数
1
解决办法
3242
查看次数

Android导航栏叠加

对于我的应用程序,我必须在android屏幕底部的导航栏顶部绘制一个位图.我很想知道WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY是否可用于覆盖导航栏?

android layoutparams android-windowmanager

5
推荐指数
1
解决办法
2502
查看次数

在WindowManager中显示可以来自"屏幕外"的视图

我有以下问题 - 我有一个视图,我正在放入WindowManager,我希望它从屏幕出来到屏幕中间进行翻译动画.

不幸的是,无论我做什么,视图都坚持轴.

这是代码:

    view = (FrameLayout) LayoutInflater.from(this).inflate(
            R.layout.poke, null);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            300, 400, WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.verticalMargin = -10f;
    params.gravity = Gravity.TOP;

    windowManager.addView(view, params);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我尝试使用边距(放在那里减去它以使其上升).

顺便说一句 - 我知道在dimen.xml中输入数字而不是dp是很难看的.它只是一个测试代码..

android android-animation android-windowmanager

5
推荐指数
1
解决办法
2243
查看次数

服务中的 WindowManager 不会删除 ImageView

我的应用程序有一个非常奇怪的问题。我有一项始终显示 ImageView 的服务。当用户与图像交互以使某些事情发生时,使用 onTouchListener。当服务关闭时,ImageView 将从窗口中删除(至少它应该如此)。

当我进行设置活动(这是一个片段)时,每次更改首选项时,我都会重新启动服务,以便在服务中进行更改。在重新启动期间,出于某种奇怪的原因,有时不会删除 ImageView。服务再次启动后,会在其顶部显示一个新的 ImageView。如果我完全关闭服务,“孤立” ImageView 只会停留在屏幕上,如果触摸它,应用程序就会崩溃。

这个错误是随机的。作为用户,我无法将它连接到特定的设置或操作;即使单击启用/禁用切换按钮几次,也可能发生错误。

设置片段

     ToggleButton enableToggle = (ToggleButton)v.findViewById(R.id.enable_toggle);
     enableToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            prefs.edit().putBoolean("HotSpotEnabled", isChecked).commit();
            if(isChecked){
                getActivity().stopService(new Intent(getActivity(),mysService.class));
                getActivity().startService(new Intent(getActivity(),myService.class));
            }
            else{
                getActivity().stopService(new Intent(getActivity(),myService.class));
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

每当用户的首选项发生更改时,我都会使用此功能重新启动服务

    public void restartService (){
        if(myService.isRunning){
            enabledToggle.setChecked(false);
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable(){
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    enabledToggle.setChecked(true);
                }
            }, 1000);
        }

    }
Run Code Online (Sandbox Code Playgroud)

(我使用切换来重新启动服务而不是 stopService();-startService(); 因为由于某种原因,这种问题不太常见) …

android imageview android-windowmanager

5
推荐指数
1
解决办法
155
查看次数

长按EditText崩溃:无法添加窗口

我想尝试长按一下EditText,但是当我做长按时,我会收到以下错误.我希望能够长按一次以获取"复制/粘贴/全选"上下文弹出窗口,以便用户可以将文本粘贴到框中.

Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@799bfc6 is not valid; is your activity running?
Run Code Online (Sandbox Code Playgroud)

EditText位于PopupWindow的ScrollView中.因此,当错误发生时,我当前在PopupWindow打开的Activity上处于活动状态,并且我在PopupWindow中包含的EditText中进行长按.

Gradle设置

compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
    applicationId 'com.accoservice.cico'
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 37
    versionName '4.2.6'
    multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)

包含EditText的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/outer_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#73000000">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="100dp"
        android:layout_marginBottom="5dp"
        android:background="#ffffff"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="15dp"
            android:singleLine="true"
            android:text="@string/note_msg"
            android:textColor="#62CCFE"
            android:textSize="18sp" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="10dp"
            android:background="#62CCFE" />

        <ScrollView
            android:id="@+id/sv_resolution_note"
            android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-view android-windowmanager android-window

5
推荐指数
1
解决办法
604
查看次数

具有不透明导航栏的深色文本透明状态栏

等等,这不是重复的

此处已提出类似的问题,但未解决深色文本状态栏。

我想做的事

我想实现三件事情在同一时间

  1. 透明状态栏(不隐藏它!)
  2. 暗文字状态栏
  3. 不透明(或黑色)导航栏(不允许活动内容在其下方膨胀

我尝试过的

解决方案

            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

只能达到1和3;

这里的解决方案只能达到1和2;

而且这里的解决方案只能达到2和3。

问题

那么有没有办法实现1、2和3?

android statusbar android-view android-windowmanager android-window

5
推荐指数
1
解决办法
703
查看次数

正确使用WindowManager.removeViewImmediate()

的文档WindowManager.removeViewImmediate()包含警告(重点为我):

它的特殊变体在返回之前ViewManager.removeView(View)立即调用给定视图层次结构的View.onDetachedFromWindow()方法。这不是正常应用;正确使用它需要非常小心。

我很好奇“精心护理”在这里意味着什么。大概这表明除非我知道如何处理使用该方法的所有副作用,否则我不应该调用此方法……但是我什至不知道这些副作用可能是什么。


考虑以下活动,我尽可能将其制成。没有遗漏的代码(除了导入),并且Activity的主题只是一个普通的AppCompat主题:

public class MainActivity extends AppCompatActivity {

    private View overlay;

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

        getWindow().getDecorView().post(() -> {
            overlay = new View(this);
            overlay.setBackgroundColor(Color.RED);

            WindowManager.LayoutParams params =
                    new WindowManager.LayoutParams(WindowManager.LayoutParams.FLAG_FULLSCREEN);

            getWindowManager().addView(overlay, params);
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        getWindowManager().removeView(overlay);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序并将设备从纵向旋转到横向(或导致其被破坏和重新创建的任何其他方式)时,这将显示在日志中:

2018-10-09 13:58:02.162 11270-11270/com.example.stackoverflow E/WindowManager: android.view.WindowLeaked: Activity com.example.stackoverflow.MainActivity has leaked window android.view.View{e99861 V.ED..... ........ 0,0-1080,1920} that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:511)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
        at …
Run Code Online (Sandbox Code Playgroud)

android android-windowmanager

5
推荐指数
1
解决办法
460
查看次数