在微调器外部单击时关闭微调器

问题描述 投票:0回答:4

我想在单击微调器外部后关闭 Android 微调器。这可能吗?

android onclick spinner
4个回答
1
投票

我在这方面有一些运气,即使它并不完全有效。

旋转适配器的获取视图:

public View getView(int position, View v, ViewGroup parent) {
   if (v == null) {
      LayoutInflater mLayoutInflater = mActivity.getLayoutInflater();
      v = mLayoutInflater.inflate(R.layout.user_row, null);
   }

   View tempParent = (View) parent.getParent().getParent().getParent();
   tempParent.setOnTouchListener(new MyOnTouchListener(mActivity));
   mActivity.setOpen(true);

   User getUser = mUsers.get(position);
   return v;
}

ontouch 监听器:

public class MyOnTouchListener implements OnTouchListener{
   private MyActivity mOverall;
   public MyTouchListener(MyActivity overall) {
      mOverall = overall;
   }

   public boolean onTouch(View v, MotionEvent event) {
      if (mOverall.getOpen()) {
         mOverall.getWindow().setContentView(R.layout.main); //reset your activity             screen
         mOverall.initMainLayout(); //reset any code.  most likely what's in your oncreate
      }
      return false;
   }  
}

项目选定的侦听器:

public class MySelectedListener implements OnItemSelectedListener {
   public void onItemSelected(AdapterView<?> parent, View view, int pos,
    long id) {
     setUser(pos); //or whatever you want to do when the item is selected
     setOpen(false);         
  }
  public void onNothingSelected(AdapterView<?> parent) {}
}

活动

您的旋转器活动应该有一个带有 get 和 set 方法的全局变量 mOpen。 这是因为即使列表关闭后,ontouch 侦听器也往往会保持打开状态。

该方法的局限性:

如果您触摸微调器和选项之间或选项的侧面,它会关闭。 触摸微调器上方和选项下方仍然无法将其关闭。


1
投票

尝试

@Override
public void onFocusChange(View v, boolean hasFocus) {

if (!hasFocus) v.setVisibility(View.GONE);

}

1
投票

我希望能够确定微调菜单何时显示以及何时关闭。经过一番查找,并没有太多好的解决方案。我通过执行以下操作来完成此任务:

  1. 创建了一个自定义微调器类,并重写以下方法:

    @Override
    public boolean performClick() {
    this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown
        return super.performClick();
    }
    
  2. 在我的 Activity 中,重写 onWindowFocusChanged(boolean hasFocus) 方法。如果 hasFocus == true && #1 中的标志设置为 true,则微调器已被关闭(可以通过选择或点击微调器外部)。

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (actionBarSpinner.isDropdownShown() && hasFocus) {
        actionBarSpinner.setDropdownShown(false);
        //Do you work here
    }
    

    }

祝你好运!


0
投票

与 com.github.skydoves:powerspinner:1.2.7 只添加

languageSpinner.setIsFocusable(true)
© www.soinside.com 2019 - 2024. All rights reserved.