別の行のテーブルレイアウトビュー内に2つのスピナーとEditTextコントロールがあります。スピナーにはデータが入力されています。私の問題は、スピナーに入力されるデータ(テキスト)が長すぎて画面サイズに合わないことです。したがって、スピナーは別の行の他のコントロールを不必要に伸ばすことを余儀なくされます。
スピナーにテキストを表示することは私にとって必須です。したがって、省略記号を使用することはできません。可能であれば、長いテキストをスピナーで折り返すにはどうすればよいですか?
ステップ1。TextView with wrapped text
最初に行うことは、単純なTextView
にテキストを強制的に折り返すことです。それは簡単です:
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:singleLine="false"
Android:text="very long text that will be wrapped to next line" />
ここのsingleLine
属性に注意してください。
ステップ2。カスタムレイアウト
次に、singleLine
属性をfalse
でTextView
に設定し、Spinner
がアイテムをリストに表示するために使用する必要があります。
コードには、Spinner
で使用するアダプターを作成する場所があります。
this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
Android.R.layout.simple_spinner_dropdown_item);
アイデアは Android.R.layout.simple_spinner_dropdown_item レイアウトをプロジェクトにコピーすることです。次に、singleLine
のfalse
属性をCheckedTextView
に設定して変更します。
これを行うには、次のコードを使用して、res/layout
という名前のmultiline_spinner_dropdown_item.xml
フォルダーにファイルを追加します。
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:singleLine="false"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/listPreferredItemHeight"
Android:ellipsize="Marquee" />
このファイルは Android.R.layout.simple_spinner_dropdown_item レイアウトと同じですが、singleLine
がfalse
に設定されている点が異なります。
ステップ3。カスタムレイアウトでのアダプターの作成
アダプター作成コードを次のように変更します。
this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
R.layout.multiline_spinner_dropdown_item);
これは、Android SDKの変更されたSpinnerActivity
の例のスクリーンショットです。