有没有办法以编程方式禁用特定布局中的所有项目?

时间:2010-09-29 00:36:30

标签: android user-interface

我有一个游戏,我最近添加了一个全局高分功能,这让很多人感到不安,所以我想添加禁用它的选项。 我做的是这样的:在我的设置活动视图中,我添加了以下内容:

<!-- High Score Tracking -->
 <LinearLayout android:layout_weight="40"
  android:layout_width="fill_parent" android:layout_height="wrap_content"
  android:orientation="vertical" android:padding="5dip">
  <LinearLayout android:layout_width="fill_parent"
   android:layout_height="wrap_content">
   <CheckBox android:text="@string/EnableHighscoreCBText"
    android:id="@+id/EnableHighscoreCB" android:layout_width="fill_parent"
    android:layout_height="wrap_content">
   </CheckBox>
  </LinearLayout>
  <!-- High score specific settings -->
  <LinearLayout android:layout_width="fill_parent"
   android:layout_height="wrap_content" android:orientation="horizontal"
   android:weightSum="100" android:padding="5dip">
   <CheckBox android:text="@string/EnableShareScoresCBText"
    android:id="@+id/EnableShareScoresCB" android:layout_width="fill_parent"
    android:layout_height="wrap_content">
   </CheckBox>

   <TextView android:id="@+id/DefaultPlayerNameTv"
    android:layout_width="wrap_content" android:layout_weight="30"
    android:layout_height="wrap_content" android:text="@string/pDefName"
    android:textSize="18sp">
   </TextView>
   <EditText android:id="@+id/PlayerNameEt"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:text="@string/pNameDefVal" android:layout_weight="70"
    android:textSize="18sp" android:maxLength="20">
   </EditText>
  </LinearLayout>
 </LinearLayout>

我想要做的是在用户取消选中启用高分跟踪复选框时禁用整个“高分特定设置”布局。 我尝试通过将setEnabled设置为false来禁用它,但这根本不起作用。 我应该使用视图组还是其他什么? 我应该运行刷新方法来应用更改吗?

3 个答案:

答案 0 :(得分:34)

将View.OnClickListener添加到CheckBox,然后将您要禁用的视图传递给以下函数...

private void enableDisableView(View view, boolean enabled) {
    view.setEnabled(enabled);

    if ( view instanceof ViewGroup ) {
        ViewGroup group = (ViewGroup)view;

        for ( int idx = 0 ; idx < group.getChildCount() ; idx++ ) {
            enableDisableView(group.getChildAt(idx), enabled);
        }
    }
}

答案 1 :(得分:0)

只需通过setVisibility()控制布局的visiblity参数即可。您可以在三个值之间切换:visibleinvisiblegone(请参阅the documentation)。

我认为在您的情况下,最有意义的是在visiblegone之间切换。

答案 2 :(得分:0)

显然,正确的方法是使用偏好...我现在正在阅读它,但我认为如果他们试图实现类似的东西,人们应该使用它 有关详细信息,请查看以下链接:

http://android-journey.blogspot.com/2010/01/for-almost-any-application-we-need-to.html 和 developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.html developer.android.com/reference/android/preference/Preference.html