web-dev-qa-db-ja.com

スピナーで長いテキストをラップする方法は?

別の行のテーブルレイアウトビュー内に2つのスピナーとEditTextコントロールがあります。スピナーにはデータが入力されています。私の問題は、スピナーに入力されるデータ(テキスト)が長すぎて画面サイズに合わないことです。したがって、スピナーは別の行の他のコントロールを不必要に伸ばすことを余儀なくされます。

スピナーにテキストを表示することは私にとって必須です。したがって、省略記号を使用することはできません。可能であれば、長いテキストをスピナーで折り返すにはどうすればよいですか?

21
aby

ステップ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属性をfalseTextViewに設定し、Spinnerがアイテムをリストに表示するために使用する必要があります。

コードには、Spinnerで使用するアダプターを作成する場所があります。

this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
                Android.R.layout.simple_spinner_dropdown_item);

アイデアは Android.R.layout.simple_spinner_dropdown_item レイアウトをプロジェクトにコピーすることです。次に、singleLinefalse属性を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 レイアウトと同じですが、singleLinefalseに設定されている点が異なります。

ステップ3。カスタムレイアウトでのアダプターの作成

アダプター作成コードを次のように変更します。

this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
                 R.layout.multiline_spinner_dropdown_item);

これは、Android SDKの変更されたSpinnerActivityの例のスクリーンショットです。

enter image description here

60
inazaruk