显示加载指示器时禁用所有触摸

时间:2014-07-02 21:35:07

标签: android

我有一个简单的主要布局,然后我添加一个片段布局,只显示在该主布局顶部加载的指示器。问题是我仍然可以按下加载指示器后面的按钮。

是否有禁用触摸所以它不会传递到后面?我不想一个接一个地禁用主屏幕上的每个按钮。

2 个答案:

答案 0 :(得分:14)

您可以在包含ProgressBar的布局中将“clickable”属性设置为“true”:

<FrameLayout 
    android:id="@+id/progressBarContainer"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:clickable="true" >

    <ProgressBar
        android:id="@+id/progressBar" 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="center" />

</FrameLayout>

然后,当ProgressBar可见时,它的容器(虽然它不可见,它填满整个屏幕)将拦截任何点击事件,这样当你的ProgressBar显示时它们不会落入底层布局。

要使用此功能,请在要显示ProgressBar时执行此操作:

findViewById(R.id.progressBarContainer).setVisibility(View.VISIBLE);

然后在完成后再执行此操作:

findViewById(R.id.progressBarContainer).setVisibility(View.INVISIBLE);

例如,如果你在AsyncTask中使用它,你可以在onPreExecute()中看到它,然后在onPostExecute()中使它不可见。

答案 1 :(得分:1)

在您想阻止用户触摸时返回true。在Activity

中覆盖此方法
@Override
public boolean onTouchEvent( MotionEvent event ) {
    return true;
}