スピナーの「無効」状態を無効に見えるようにするにはどうすればよいですか?。
私は投稿に記載されている解決策を試しました、すなわち
((Spinner) spinner).getSelectedView().setEnabled(false);
spinner.setEnabled(false);
ただし、getSelectedView()はnullを返します。また、アイテムを手動で選択してgetSelectedViewを呼び出そうとしましたが、それでもnullが返されます。
スピナーの「無効」状態を無効に見えるようにするにはどうすればよいですか?。
私は投稿に記載されている解決策を試しました、すなわち
((Spinner) spinner).getSelectedView().setEnabled(false);
spinner.setEnabled(false);
ただし、getSelectedView()はnullを返します。また、アイテムを手動で選択してgetSelectedViewを呼び出そうとしましたが、それでもnullが返されます。
私は最も簡単な方法を考え出しました:
private void setSpinnerEnabled(Spinner spinner, boolean enabled) {
    spinner.setEnabled(enabled);
    spinner.setAlpha(enabled ? 1.0f : 0.4f);
}
色やフォントは変更されません。もう少し透明にします...
これを行う1つの方法は、独自のSpinnerAdapter(ArrayAdapterなど)を作成してから、getView()メソッドをオーバーライドすることです。通常、このメソッドはandroid.R.layout.simple_spinner_itemレイアウトを拡張し、TextViewをデータ(ArrayAdapterの場合は配列)にバインドします。そのレイアウトを取得して(Android SDKフォルダーからコピーして)、無効なバージョンを作成してから、次のような操作を行うことができます。
private static final int SPINNER_ENABLED = android.R.layout.simple_spinner_item;
private static final int SPINNER_DISABLED = R.layout.simple_spinner_item_disabled;
    @Override
    public final View getView(int position, View convertView, ViewGroup parent) {
        View spinnerView = View.inflate(getContext(), isEnabled(position) ? SPINNER_ENABLED : SPINNER_DISABLED, null);
        TextView textView = (TextView) spinnerView.findViewById(R.id.text1);
        textView.setText(getItem(position).toString());
        return spinnerView;
    }
android.R.layout.simple_spinner_itemは次のようになります。
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee" />
    このようにres/drawableフォルダーにドローアブルセレクターを作成します
custonspinner.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <!-- disabled state -->
  <item android:state_enabled="false" android:color="#9D9FA2" /> 
  <item android:color="#000"/>
</selector>
//セレクターで色の代わりにドローアブルを指定することもできます
スピナーで、このようにバックグラウンドリソースを設定します
android:backgroundResource="@drawable/customspinner"
    @ JSPDeveloper01の答えは私にはうまくいきませんでした(おそらく、アダプターを設定する順序、または2つのカスタムスピナークラスを使用しているためです。最初のクラスはLinearLayoutクラスを拡張し、2番目のクラスはLinearLayoutクラスを拡張します。 Spinnerクラスを拡張します)。キーは、setEnabled関数で古いオブジェクトを無効にし、onDraw関数で色を設定します。
これらのカスタムスピナークラスの両方の中に、このような特別なsetEnabled関数があり、古いビューを無効にします。
public void setEnabled(Boolean enabled) {
    super.setEnabled(enabled);
    invalidate();
}
また、各カスタムスピナークラスのonDraw関数をオーバーライドします(JSPDeveloper01の回答の一部を使用)。
@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (this.getChildAt(0) != null) {
        this.getChildAt(0).setAlpha(this.isEnabled() ? 1.0f : 0.7f);
    }
}