【问题标题】:Unclickable button when i use layoutinflater当我使用 layoutinflater 时无法点击的按钮
【发布时间】:2015-03-31 09:50:59
【问题描述】:

请任何人帮助我,我正在开发应用程序:当有人调用它时,它会显示一个包含一些信息的布局,在该布局内有一个关闭按钮,当我点击它时,它应该隐藏布局或销毁应用程序,我的问题是布局显示但按钮不可点击,就像按钮的图像一样。这是我的代码:

@Override 
public void onCreate() { 
    super.onCreate(); 
    toastLayout = (ViewGroup)layoutInflater.inflate(R.layout.toast, null);
    defaultPopupHorizontalGravity = getResources().getInteger(R.integer.default_popup_horizontal_gravity);
    defaultPopupVerticalGravity = getResources().getInteger(R.integer.default_popup_vertical_gravity);
    //defaultPopupMap = Boolean.parseBoolean(getResources().getString(R.string.default_popup_map));
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE//FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,//FLAG_NOT_TOUCHABLE
            PixelFormat.TRANSLUCENT
    );
    Button X = (Button) toastLayout.getChildAt(0);
    toastLayout.addView(X);
    X.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            System.out.println("Clicked----><<<<<<<");
        }
    });

    X.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            System.out.println("Touched =----- > ");
            return false;
        }
    });
    windowManager.addView(toastLayout, params);

【问题讨论】:

标签: android


【解决方案1】:

您正在使用 FLAG_NOT_TOUCH_MODALFLAG_NOT_FOCUSABLE 在使用这些参数创建布局时禁用触摸

您也不需要再次添加按钮 X,因为它已经是您的 toast 布局的子元素(否则 getChildAt 将无法按预期工作,并且如果该位置的子元素不是,则可能会产生强制转换异常一个按钮)所以删除该行:

toastLayout.addView(X);

【讨论】:

  • 我应该用什么替换 FLAG_NOT_TOUCH_MODAL 和 FLAG_NOT_FOCUSABLE ?
  • 如果没有特定的行为,您只需要保留 0。如 cmets 中所述,您的布局定义应在 xml 中包含所需的属性,因此无需再次设置
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2019-06-16
  • 2022-11-16
  • 2023-03-21
相关资源
最近更新 更多