スピナーを無効にすると、無効にする前とほぼ同じように見えます。
変更前
後
無効になっているので、機能的にはすべて問題ありませんが、look無効にしたいのですが。この質問は、トラップについて尋ねられたようです(ここおよびここ例)しかし、最も近い人が答えにくるのはthisです。これは不完全に見え、とにかく理解できませんか?
ロマンは言った Froyo以降で修正される予定でしたが、私はハニカムを使用しており、スクリーンショットからわかるように、作業。任意のアドバイスをいただければ幸いです。
これがまだ必要かどうかはわかりませんが、方法はあります。私自身もこの問題に取り組んできました。私はこのようなことをすることになりました:
((Spinner) spinner).getSelectedView().setEnabled(false);
spinner.setEnabled(false);
これが実際に行うことは、表示されているスピナーと選択されたアイテムを無効にすることです。ほとんどの場合、選択された項目は TextView であり、無効なTextViewとして表示されます。
私はこれを使用しており、動作します。しかし、何らかの理由で私にはわからないため、他の無効化されたビューほど「グレー表示」されていません。それでも無効になっているように見えます。やってみて。
スピナーを無効に見えるようにする賢い方法の1つは、透明度を下げることです。
Spinner spinner = (Spinner) findViewById(R.id.my_spinner);
spinner.setEnabled(false);
spinner.setAlpha(0.5f);
カスタムレイアウトでアダプタを作成する(つまり、R.layout.simple_spinner_item
を拡張する)場合は、次の属性をXMLに追加します:Android:duplicateParentState="true"
_((Spinner) spnr).getSelectedView().setEnabled(false);
((Spinner) spnr).setEnabled(false);
_
spnrは、findViewById(...)
によってXMLビューファイルを参照するSpinner
オブジェクトです。
私は以下を試しました、そしてそれは私にとって期待通りに機能しています:
_userMembership.setEnabled(false);
_userMembership.setClickable(false);
_userMembership.setAlpha((float)0.7);
_userMembership.setBackgroundColor(Color.GRAY);
.getSelectedView()
が機能しませんでした。だから私はSpinner
をだましてshowを無効にしました。
disabledの外観には独自の色を定義する必要があります。
例:
R.color.blue_text //means enabled
R.color.gray_text //means disabled
したがって、私のspinner:を無効にする
((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.gray_text));
mySpinner.setEnabled(false);
mySpinner.setFocusable(false);
スピナーを有効にするには:
((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.blue_text));
mySpinner.setEnabled(true);
mySpinner.setFocusable(true);
スタイルを変更したり、XMLを変更したりする必要はありません。コードでこれを行うだけで、イベントメソッド内でも問題ありません。
これは私のために働いた...スピナーを無効にするために
your_spinner.getSelectedView();
your_spinner.setEnabled(false);
それを再び有効にします
your_spinner.setEnabled(true);
これは、以前に@ JSPDeveloper01によって回答された同じ質問に対する最良の解決策であることがわかりました: https://stackoverflow.com/a/20401876/8041634
Androidが無効に設定されている場合、スピナーはグレー表示されないため、スピナーで.setAlpha
コマンドを使用してテキストをグレー表示するカスタムメソッドを作成することをお勧めしますその中で。
次のように、型キャストをせずに行うこともできます。
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
// Depend on your selection check position and disable it
if(position == 1) {
view.setEnabled(false);
view.setEnabled(false);
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
私がアダプタを設定している順序、または2つのカスタムスピナーを使用しているという事実が原因で、鉱山が特殊なケースになる可能性がありますclasses:
LinearLayout
クラスを拡張し、Spinner
クラスを拡張します。スピナーが無効に見えるようにするために見つけたキーは次のとおりです。
setEnabled
関数の古いオブジェクトを無効化し、onDraw
関数で色を設定します。これらのカスタムスピナークラスの両方の内部に、次のような特別なsetEnabled
関数があり、古いビューを無効にします。
public void setEnabled(Boolean enabled) {
super.setEnabled(enabled);
invalidate();
}
各カスタムスピナーのonDraw
関数もオーバーライドしますclass:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (this.getChildAt(0) != null) {
this.getChildAt(0).setAlpha(this.isEnabled() ? 1.0f : 0.7f);
}
}
後で参照できるように、Kotlinを使用している場合は、拡張関数を使用して、無効な要素にカスタム動作を提供できます。
fun Spinner.forceEnabled(isEnabled : Boolean){
setEnabled(isEnabled)
getChildAt(0)?.let{ childView ->
childView.alpha = if (this.isEnabled) 1.0f else 0.33f
}
invalidate()
}
someSpinner.forceEnabled(true)
これにより、スピナーが無効になっているため、サブクラス化する必要なく、カスタムプロパティをスピナーの子ビューに設定できます。拡張関数は静的に解決されるため、注意が必要です。
ビューは、複数のタッチ可能な要素で構成できます。次のように、すべて無効にする必要があります。
for(View lol : your_spinner.getTouchables() ) {
lol.setEnabled(false);
}
それ自体も返すので、それが単純なものである場合:
このビューの子孫であるすべてのタッチ可能なビューを見つけて返します。タッチ可能な場合は、このビューも含まれます。
同様の問題がありましたが、getChildViewがnullを返したため、例外の解決策が機能しませんでした。これは、アダプターをXMLで設定したために発生したと考えられ、「クリック可能」および「有効」属性を無視しました。
これは私のXMLでした:
<Spinner
Android:id="@+id/my_id"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="@dimen/spacing_large"
Android:alpha="0.86"
Android:enabled="false"
Android:clickable="false"
Android:entries="@array/array_of_entries"
Android:spinnerMode="dropdown"/>
私のための解決策は、「有効」および「クリック可能」属性を削除し、次のコードを「onCreate」に配置することでした
spinner.setEnabled(false);
それが誰かを助けることを願っています!