Androidの高さを入力するフォームがあります。しかし、ユーザーが測定単位(フィート/インチ、センチメートル)を選択できるスピナーがあり、次にEditText
実際の値を入力できる場所複数のユニットタイプのAndroid EditText
ユーザーがcmを単位として選択すると、シングルEditText
。彼らがフィート/インチを選択した場合、私は2 EditText
のフィールドを表示したい
私は現在これを処理している方法は非効率的だと思われます。私は3 EditText
フィールドを持っています:1 cm、足は1、インチは1
私はonItemSelected
リスナーをスピナーに付けます。ユーザーがcmオプションを選択した場合、EditText
のI setVisibility(view.VISIBLE)
、フィートとインチの両方のsetVisibility(view.INVISIBLE)
EditText
フィールド。彼らが足/インチオプションを選択した場合、私は逆の可視性を行い、対応するフィールドを表示/非表示にします。
異なる数のEditText
フィールドを必要とする複数のユニットタイプを処理するより適切な方法はありますか?
注:私のEditText
は実際にはTextInputLayouts
にまとめられていますので、マテリアルアニメーションはヒントを得ることができ、TextInputLayouts
は視認性を設定しています。
コードは次のようになります。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Height unit spinner
String [] values = {"cm","ft"};
Spinner spinner = (Spinner) view.findViewById(R.id.input_height_spinner);
spinner.setOnItemSelectedListener(this);
ArrayAdapter<String> LTRadapter = new ArrayAdapter<>(this.getActivity(), android.R.layout.simple_spinner_item, values);
LTRadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner.setAdapter(LTRadapter);
heightCMWrapper = (TextInputLayout) view.findViewById(R.id.input_height_cm_wrapper);
heightFTWrapper = (TextInputLayout) view.findViewById(R.id.input_height_ft_wrapper);
heightINWrapper = (TextInputLayout) view.findViewById(R.id.input_height_in_wrapper);
//Some other code for inflating layout etc.
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
heightCMWrapper.setVisibility(view.VISIBLE);
heightCMWrapper.setHint("Height (cm)");
heightCMWrapper.requestFocus();
heightFTWrapper.setVisibility(view.INVISIBLE);
heightFTWrapper.setHint("");
heightINWrapper.setVisibility(view.INVISIBLE);
heightINWrapper.setHint("");
break;
case 1:
heightCMWrapper.setVisibility(view.INVISIBLE);
heightCMWrapper.setHint("");
heightFTWrapper.setVisibility(view.VISIBLE);
heightFTWrapper.setHint("Feet");
heightFTWrapper.requestFocus();
heightINWrapper.setVisibility(view.VISIBLE);
heightINWrapper.setHint("Inches");
break;
}
}
おかげでどのように見えるかです。ユーザーがFeetを選択したときにCM EditTextを 'View.GONE'で設定した場合、ユーザーがスピナーからCMを選択した場合、再び元に戻すにはどうすればいいですか?すなわち、 'View.GONE'の反対のものは何ですか? – Simon
を 'View.VISIBLE'に戻して設定すると、そのジョブが実行されます。彼らの意見が反対であるとは思わないでください。'VISIBLE 'は、完全に可視である「INVISIBLE」は、可視ではないがまだ空間を占める状態であり、「GONE」は、可視ではなく空間をとらない状態である。これらの状態はいずれも最終的なものではなく、安全に相互に交換することができます。 – Dom