42

ユーザーが入力する項目が多い画面があるため、画面スペースが限られています。

画面上のウィジェットの外観 (ユーザーが押す前) を、EditText またはスピナーの右側にあるスピナー ウィジェットの左側の部分 (通常の下向き三角形なし) に似たものにしたいと考えています。次に、ユーザーがウィジェットを押すと、通常のスピナー選択ダイアログが表示されます。

これを達成するために変更できる Spinner スタイル属性はありますか?

私はこのようなコードを見ることができませんでした。

ありがとう

4

8 に答える 8

67

これはかなり古い質問ですが、今でも関連性があると思うので、私の答えは次のとおりです。

最も簡単な方法

レンチハウスの答えは正しいです。それは機能しますが、もっと簡単な方法で行うことができます: 別の背景を追加するだけです。以下の例では、標準的なButton背景を使用して、より均一なルック アンド フィールを実現しています。

<Spinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:prompt="@string/my_prompt" 
    android:background="@android:drawable/btn_default"
    />       

他の回答で使用されているスタイルは、ウィジェットに背景を適用するだけです。これは、ウィジェットに対して直接行うことができるため、新しい xml ファイルを作成する必要がありません。もちろん、とにかくスピナーにスタイルを適用する場合は、そのアプローチに問題はありません。

なんで?

それがどのように機能するかを理解するための鍵は、9-patch PNGs の説明にあります。右側と下部の行はパディングに使用されます。つまり、コンテンツによってスペースが使用されないようにするためです。この場合、内部のテキスト。標準の Spinner 背景では、使用可能なテキスト領域の外側にある右側に矢印のある画像が使用されます。図については、以下の図 1 を参照してください。

図 1. 元の Spinner 暗黒 9 パッチ PNG http://tinypic.com/images/404.gif
図 1. 元Spinnerの暗黒 9 パッチ PNG。

パディングが残っているため、矢印を削除するだけでは不十分です。パディングを減らした新しい 9 パッチ イメージを使用するか (図 1 に基づく例については図 2 を参照)、またはEditText( @android:drawable/edit_text) またはButton( @android:drawable/btn_default)。

図 2. パディングを減らした変更された Spinner 背景の 9 パッチ PNG
図 2.Spinnerパディングを減らして変更された背景の 9 パッチ PNG。

Spinnerこれを理解すると、(実際には、任意のウィジェットの)独自の背景を作成できるようになります。

9パッチファイルのより良い説明はここにあります

SDK からdraw9patch実行可能ファイルを使用してファイルを作成するのは非常に簡単ですが(詳細については、こちらを参照してください)、代わりにPhotoshopGimpを使用することを妨げるものは何もありません。9 パッチ PNG は単なる PNG であることを忘れないでください。唯一の注意点は、ピクセルの外側の線のみを描画し、残りのピクセルが完全に透明であることを確認することです。境界に近いアンチエイリアシングは、予期しない結果をもたらす可能性があります。

于 2011-05-08T14:33:01.873 に答える
40

できることの 1 つはSpinner、android コード ベースから のソース コードを取得し、関連するレイアウトとリソースを使用して、独自のカスタム ウィジェットを作成することです (おそらく、レイアウトから矢印を削除し、コードを微調整するだけで済みます)。必要に応じて少し)。

編集:その通りです。その投稿に従うと、実際には本当に簡単でした:) 2つのことをしなければなりません。まず、res/values の下に styles.xml ファイルを作成し、それを開いて以下を追加します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style parent="@android:style/Widget.Spinner" name="SpinnerAsEditText">
        <item name="android:background">@android:drawable/edit_text</item>
    </style>
</resources>

次に、レイアウトで、次のようにスピナーを追加します。

<Spinner style="@style/SpinnerAsEditText" anyOtherAttributeYouNeed="..."></Spinner>

それだけです。これで、スピナーは、役に立たず迷惑な下矢印がなくても、プレーンな EditText のように見えます。

于 2010-10-30T16:23:40.363 に答える
15

スピナーに三角形のインジケーターが表示されていなかったため、この質問にたどり着きました。理由がわかりました。背景を「白」に設定していました。

android:background="#FFFFFFFF"

これにより、三角形のインジケーター (Aleadam が指定したスピナーの背景画像とパディング) が削除されます。

私の問題では、背景を「白」に設定するためだけに親 LinearLayout を追加して解決します。

于 2013-08-22T06:46:48.237 に答える
7

背景を与えると、矢印が消えます。

android:background="@drawable/bg"
于 2016-02-17T21:20:29.097 に答える
2

スピナーを実際にクリックしたときにとられるスペースの関連する問題について、右側の大きな選択インジケーターを削除できることを偶然発見しました。行で区切られた基本的なリストが表示されますが、アイテムをクリックしても機能します。

次のようなスピナーを設定して、選択インジケーターを取得します。

    Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
            this, R.array.petals, android.R.layout.simple_spinner_item);
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(adapter1);

インジケーターがない場合は、setDropDownViewResource 行を省略します。

于 2011-11-01T14:32:08.547 に答える
1

リストとの対話に行ってみませんか。要件に応じて、edittext フィールドを作成し、setOnFocusChangeListener を追加してから、onFocusChange() メソッドでリスト項目を含むダイアログを表示します。リスト項目のあるダイアログの場合

new AlertDialog.Builder(this)
                .setTitle("<Title>")
                .setItems(R.array.<ItemsArrayName>, new DialogInterface.OnClickListener(){
     @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub  
}}).show();
于 2011-02-02T03:44:30.247 に答える