应用程序的工作方式如下:应用程序向用户提示 30 个按钮,用户可以通过点击猜出正确的按钮。当用户点击某个按钮时,所有按钮(比如包含这些按钮的视图)应该在播放相应的(正确或错误猜测)动画时被锁定。点击按钮本身应该被禁用,直到下一轮。动画完成后,所有之前未点击的按钮(比如包含这些按钮的视图)应该再次可用。
所以我有一个布局,其中包含另一个带有这 30 个按钮的布局:
...
<RelativeLayout
android:id="@+id/alphabetContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<include layout="@layout/alphabet" />
</RelativeLayout>
...
现在我需要锁定按钮不被点击,然后解锁。所以我尝试了:
...
private RelativeLayout alphabetPanel;
...
public void onCreate(){
...
alphabetPanel = (RelativeLayout) findViewById(R.id.alphabetContainer);
...
}
...
private void lockButtons(){
alphabetPanel.setEnabled(false);
}
但这不会锁定按钮。我也试过:
alphabetPanel.setFocusable(false);
alphabetPanel.setClickable(false);
也无济于事。似乎这一切都只依赖于布局本身,而不依赖于它包含的视图。
我还尝试添加一个假布局,通过将其放在前面,将其放置在带有按钮的布局上。这是一种解决方法,它很棘手,因为两种布局都必须仅放在 RelativeLayout 内:
...
blockingLayout = new RelativeLayout(this);
blockingLayout.setLayoutParams(alphabetPanel.getLayoutParams());
...
但这很奇怪:在这种情况下,不知何故,两种布局都会每隔一秒左右出现和消失,或者根本不出现 - 我完全无法理解,因为setVisibility()
代码中没有使用任何方法!
剩下的唯一一种方法是迭代每个视图(按钮)以使其禁用而不是返回。
还有其他方法吗?
更新
最后我不得不在 xml 中添加一个“墙”布局。现在通过使其可点击和可聚焦,它成为一个解决方案。