ウィジェットの右側にトライアングルを下ることなくアンドロイドスピナーを作成する方法
-
27-09-2019 - |
質問
ユーザーが入力する多くのアイテムを持っている画面があるので、画面スペースはプレミアムです。
画面上のウィジェットの外観(ユーザーが押す前に)は、スピナーの右側にあるスピナーウィジェットの左側またはスピナーウィジェットの左部分(通常のダウントライアングルなし)に似ています。次に、ユーザーがウィジェットを押すと、通常のスピナー選択ダイアログを取得します。
これを達成するために変更できるスピナースタイルの属性はありますか?
私はこのようなコードを見ることができませんでした。
ありがとう
解決
できることの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>
それだけですが、今ではスピナーは、その無意味で迷惑なダウン矢印なしで、単純な編集のように見えます。
他のヒント
これは非常に古い質問ですが、それでも関連していると思うので、ここに私の答えがあります。
最も単純な方法
Lencinhausの答えは正しいです。機能しますが、さらに簡単な方法で実行できます。別の背景を追加するだけです。以下の例では、標準を使用しています 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"
/>
他の回答で使用されているSyleは、ウィジェットに背景を適用するだけではありません。これはウィジェットに直接実行でき、新しいXMLファイルの必要性を節約できます。もちろん、とにかくスピナーにスタイルを適用しようとしている場合、そのアプローチには何の問題もありません。
なんで?
それがどのように機能するかを理解するための鍵は、9パッチPNGの説明にあります. 。右側と下部の線は、パディングに使用されます。つまり、コンテンツで使用されないようにします。この場合、内部のテキスト。標準のスピナー背景は、使用可能なテキスト領域の外側にある右側に矢印がある画像を使用します。図1を参照してください。
図1.元のスピナーBACGRAND 9パッチPNG http://tinypic.com/images/404.gif
図1.オリジナル Spinner
Bacground 9パッチPNG。
パディングがそこに残っているため、矢印を取り外すだけでは十分ではありません。パディングの減少を備えた新しい9パッチ画像を使用する必要があります(図1に基づく例については、図2を参照)。 EditText
(@android:drawable/edit_text
) また Button
(@android:drawable/btn_default
).
図2.修正 Spinner
パディングを減らしたBacground 9パッチPNG。
これを理解することで、あなたはあなた自身の背景を作成することができます Spinner
(そして、実際には、任意のウィジェットの場合)。
9パッチファイルのより良い説明 ここで見つけることができます
でファイルを作成するのは非常に簡単です draw9patch SDKからの実行可能ここでそれについて読んでください)、しかし、あなたが使用することを妨げるものは何もありません Photoshop また gimp 代わりは。 9パッチPNGは単なるPNGです!唯一の警告は、ピクセルの外側の線のみに描画し、残りのピクセルが完全に透明であることを確認することです。 国境の近くでアンチアライアスをすると、予期しない結果が得られる可能性があります。
私はこの質問に到着しました。私のスピナーが三角形のインジケーターを示していなかったので、今は「白」に背景を設定していた理由がわかりました。
android:background="#FFFFFFFF"
これにより、三角形のインジケータ(Aleadamが述べたスピナーの背景画像とパディング)が削除されます。
私の問題については、背景を「白」に設定するためだけに、親のLinearLayoutを追加することを解決します。
背景を与えてください、矢印は消えます。
android:background="@drawable/bg"
私は同じ問題を抱えていて、スタイルを次のように変更しました。
style="@style/Widget.AppCompat.Light.DropDownItem.Spinner"
そしてそれはうまくいきました。
なんて奇妙で、その場所にあります DropDownItem
.
一方、底部の三角形を持っているものは通常の名前です。
乾杯!
実際にSpinnerをクリックしたときに撮影されたスペースの関連する問題については、右にそれらの大きな選択指標を削除できることを偶然発見しました。基本的なリストが行で分離されていますが、アイテムをクリックすると機能します。
このようなスピナーをセットアップして、選択インジケーターを取得します。
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ラインを除外してください。
リスト付きのダイアログに行ってみませんか。要件に応じて、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();
私には答えが役に立たなかったので、ここにうまく機能した本当に簡単なワンラインソリューションがあります。
//some spinner initialisation stuff->
mySpinner.setAdapter(adapter);
//some spinner initialisation stuff->
mySpinner.getBackground().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
デフォルトのスピナーレイアウトだけで動作するかどうかは確かではありませんが、他のニーズのために作成した習慣とうまく機能しました。