21

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

スピナーでテキストを表示することは私にとって必須です。したがって、楕円の使用はオプションではありません。可能であれば、長いテキストをスピナーにラップするにはどうすればよいですか?

4

2 に答える 2

61

手順1.テキストが折り返されているTextView

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属性をinusedに設定する必要があります。falseTextViewSpinner

あなたのコードには、おそらくそれを使用するためのアダプターを作成する場所がありますSpinner

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

アイデアは、 android.R.layout.simple_spinner_dropdown_itemレイアウトをプロジェクトにコピーすることです。次に、singleLine属性をに設定して変更falseCheckedTextViewます。

このために、次のコードで名前が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);

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

ここに画像の説明を入力してください

于 2011-05-24T08:33:37.543 に答える
-3

カスタム レイアウトを定義し、それをスピナーとアダプターで使用します。

于 2011-05-24T08:24:22.513 に答える