Is there a way to disable all the items in a specific layout programmatically?
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 ap开发者_Go百科ply the change?
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);
}
}
}
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
.
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
精彩评论