我想在外部点击时隐藏微调器提示弹出窗口。如果提示弹出窗口打开并且用户按下主页键活动将最小化,因此当用户再次打开应用程序时,提示弹出窗口应该消失。
有什么办法可以做到这一点。谢谢你
编辑: - 提示弹出未自定义。所以我不能将它们隐藏在onPause
或onResume
方法中。
我想在外部点击时隐藏微调器提示弹出窗口。如果提示弹出窗口打开并且用户按下主页键活动将最小化,因此当用户再次打开应用程序时,提示弹出窗口应该消失。
有什么办法可以做到这一点。谢谢你
编辑: - 提示弹出未自定义。所以我不能将它们隐藏在onPause
或onResume
方法中。
嗯,它比我想象的要复杂一些。
我在这里添加一步一步的详细信息。尝试跟随它。我能够在 api 级别 10 中实现这一点。
并且此解决方案假定您应该在用户单击主页按钮时以编程方式关闭提示对话框,或者如果您必须在没有用户交互的情况下移动到下一个活动
第一步是通过扩展 Spinner 类来创建自定义 Spinner。假设我在 com.bts.sampleapp 包中创建了一个名为CustomSpinner的类
我的 CustomSpinner 类看起来像这样,
package com.bts.sampleapp;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.Spinner;
public class CustomSpinner extends Spinner{
Context context=null;
public CustomSpinner(Context context) {
super(context);
this.context=context;
}
public CustomSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
}
现在在您的 Xml 文件中,用这个自定义微调器替换 Spinner 元素,
<com.bts.sampleapp.CustomSpinner
android:id="@+id/spin"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
下一步是在 Activity 类中初始化并设置适配器到这个微调器,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CustomSpinner spin=null;
spin=(CustomSpinner)findViewById(R.id.spin);
spin.setAdapter(spinnerAdapter); //you can set your adapter here.
}
最后一步是在用户单击 HomeButton 或 Activity 移至后台时关闭对话框。为此,我们像这样覆盖 onPause(),
@Override
protected void onPause() {
Log.i("Life Cycle", "onPause");
spin.onDetachedFromWindow();
super.onPause();
}
现在在 onPause() 中调用spin.onDetachedFromWindow();
为您关闭提示对话框的方法。
spin.onDetachedFromWindow();
如果 Spinner 提示对话框打开,从 Acitivity 中的任何位置调用也应该关闭它。
根据 Andro 的回答,您可能更喜欢反射能够调用 onDetachedFromWindow 的受保护方法。然后你不必继承 Spinner、调整布局等。
/**
* Hides a spinner's drop down.
*/
public static void hideSpinnerDropDown(Spinner spinner) {
try {
Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow");
method.setAccessible(true);
method.invoke(spinner);
} catch (Exception e) {
e.printStackTrace();
}
}
覆盖onPause方法。
受保护的无效 onPause (){ super.onPause (); this.finish(); }
spinner.clearFocus();
这是以编程方式关闭微调器的简单行