小编Mic*_*bel的帖子

触摸外面后避免PopupWindow被解雇

我想使用具有以下行为/功能的PopupWindow:

  • 它是可聚焦的(例如,按钮内有交互式控件)
  • '弹出窗口'下的视图'必须正确消耗弹出窗口外的触摸
  • ..但是弹出窗口即使在外面点击也必须留在屏幕上

我发现了一些关于PopupWindow的帖子,但没有人问过如何处理这种情况.

我想我尝试了setOutsideTouchable(),setFocusable(),setTouchable()的所有可能组合,但我陷入困境.Popup正确处理它的点击,但是当它在外面触摸时它总是被解雇.

我目前的代码是:

View.OnTouchListener customPopUpTouchListenr = new View.OnTouchListener(){

    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        Log.d("POPUP", "Touch false");
        return false;
    }

};


LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout= (LinearLayout)inflater.inflate(R.layout.insert_point_dialog, null);
PopupWindow pw = new PopupWindow(layout,400,200,true);
pw.setOutsideTouchable(true);
pw.setTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.setTouchInterceptor(customPopUpTouchListenr);
pw.showAtLocation(frameLayout, Gravity.BOTTOM, 0, 0);
Run Code Online (Sandbox Code Playgroud)

我的总体目标是创建一个浮动窗口,其行为类似于gimp等软件中的"工具调色板":内部有一些控件,保持在顶部直到被"X"按钮关闭,并允许与其外部的控件进行交互.也许有更好的方法来做到这一点,而不是PopupWindow?但我仍然没有找到更合适的控制.

android

13
推荐指数
4
解决办法
2万
查看次数

Java异常处理的良好实践

我有一些关于在Java中处理异常的问题.我读了一下它并得到了一些矛盾的指导方针.

异常处理的最佳实践

我们来看看上面提到的文章:

它声明如果"客户端代码无法执行任何操作",通常应避免使用已检查的异常.但它究竟意味着什么?在GUI中显示错误消息是否有足够的理由冒泡检查异常?但它会迫使GUI程序员记住捕获RuntimeExceptions及其后代以显示潜在的错误信息.

本文中提出的第二个观点是,除非我想在其中实现一些关税字段/方法,否则应该避免发明自己的异常类.我通常不同意这一点,我今天的练习恰恰相反:我将自己的异常结构中的异常包装到我编写的类实现的反射目标中,即使它们只是在不添加任何新方法的情况下扩展Exception.我认为在抛出更高层时更灵活地处理它们对于将使用这些类的程序员来说通常更清晰和易于理解.

我今天实现了一些代码,在文章中抛出RuntimeException,然后我让Sonar分析它.为了让我更加困惑,Sonar将我的RuntimeExceptions标记为主要错误,并标记为"避免在自己的类型中抛出root类型异常,wrap'em".

所以它看起来很有争议,你怎么看?

我今天也从一位技术主管那里听说,只是包装异常是不好的,因为这对JVM来说是一个非常昂贵的操作.对我来说,另一方面,在任何地方抛出SQLExceptions或IOExceptions看起来有点破坏封装.

那么你对我在这里提出的问题的一般态度是什么?

  1. 何时在我自己的类型中包装异常,何时不应该这样做?

  2. 哪里的那点客户端"不能做任何有关这一点,抛出运行时异常?"

  3. 性能问题怎么样?

java performance exception unchecked checked

7
推荐指数
1
解决办法
3278
查看次数

标签 统计

android ×1

checked ×1

exception ×1

java ×1

performance ×1

unchecked ×1