3

I have A game to which I recently added a global high score functionality which made a lot of people upset so I want to add the option of disabling it. What I did was this: in my settings activity view, I added the following:

<!-- 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>

What I want to do is to disable the entire "High score specific settings" layout when the user unchecks the enable high score tracking check box. I tried disabling it by setting the setEnabled to false, but that didn't work at all. Should I be using a viewgroup or something? Is there a refresh method I should run to apply the change?

Cœur
  • 37,241
  • 25
  • 195
  • 267
ekatz
  • 963
  • 3
  • 18
  • 38
  • 1
    Which view did you set setEnabled on? What effect are you looking for? If you just want to hide the whole section you can set visibility = GONE on the linearLayout. – Cheryl Simon Sep 29 '10 at 00:45
  • I'm not looking for hiding it, I want it shown, but as disabled (so that people will know it's there but will see that they can't change it) – ekatz Sep 29 '10 at 05:45

3 Answers3

37

Add a View.OnClickListener to your CheckBox then pass the View you want to be disabled into the following function...

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);
        }
    }
}
benshort
  • 670
  • 8
  • 14
0

Just control the visiblity parameter for the Layout via setVisibility(). You can switch it between three values: visible, invisible and gone (see the documentation).

I think in your case the most senseful would be to switch between visible and gone.

Marcin Gil
  • 68,043
  • 8
  • 59
  • 60
0

Apparently the correct way to do it is by using preferences... I'm reading about it now, but I think that's what people should use if they are trying to implement something like that check out the following links for more information on this:

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

ekatz
  • 963
  • 3
  • 18
  • 38