スピナーをドロップダウン矢印で設定しようとしましたが、修正できませんでした。ソースコードを添付しました。以下のリンクを試してみましたが、問題を解決できませんでした http://www.mokasocial.com/2011/03/easily-create-a-default-custom-styled-spinner- Android /
私のクラスファイル:
import Android.os.Bundle;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.ArrayAdapter;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.Spinner;
import Android.widget.AdapterView.OnItemSelectedListener;
import Android.widget.Toast;
public class topup extends Activity {
Spinner spinner,spin1,spin2,spin3;
EditText ed,ed1;
Button btn;
List<String> list, list1,list2,list3;
private String[] countries_list={"01","02","03","04","05","06","07","08","09","10","11","12"};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.topup);
spinner = (Spinner) findViewById(R.id.spinner1);
spin1= (Spinner) findViewById(R.id.spinner2);
spin2= (Spinner) findViewById(R.id.spinner3);
spin3= (Spinner) findViewById(R.id.spinner4);
ed = (EditText) findViewById(R.id.editText3);
list = new ArrayList<String>();
list.add("");
list.add("select");
list.add("01");
list.add("02");
list.add("03");
list.add("04");
list.add("05");
list.add("06");
list.add("07");
list.add("08");
list.add("09");
list.add("10");
list.add("11");
list.add("12");
ArrayAdapter<String> adp = new ArrayAdapter<String>
(this, Android.R.layout.simple_spinner_item, list);
//adp.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adp);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
//@Override
public void onItemSelected(AdapterView<?> parent, View arg1,int arg2, long arg3) {
// TODO Auto-generated method stub
String item = spinner.getItemAtPosition(1).toString();
//Toast.makeText(spinner.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
String ss=spinner.getSelectedItem().toString();
String
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
私のxmlファイル:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/back1"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginTop="20dp"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:dropDownWidth="fill_parent"
/>
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/linearLayout1"
Android:layout_alignRight="@+id/linearLayout1"
Android:layout_below="@+id/linearLayout1"
Android:layout_marginTop="25dp"
Android:background="@drawable/red"
Android:ems="10"
Android:hint="enter card number" >
<requestFocus />
</EditText>
<LinearLayout
Android:id="@+id/linearLayout2"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/editText1"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="33dp"
Android:orientation="horizontal"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner3"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
/>
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
/>
<EditText
Android:id="@+id/editText2"
Android:layout_width="22dp"
Android:layout_height="match_parent"
Android:layout_weight="0.18"
Android:ems="10"
Android:hint="enter cvv" />
</LinearLayout>
<LinearLayout
Android:id="@+id/linearLayout3"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignRight="@+id/linearLayout2"
Android:layout_below="@+id/linearLayout2"
Android:layout_marginTop="26dp"
Android:orientation="vertical"
Android:background="@drawable/red" >
</LinearLayout>
<Spinner
Android:id="@+id/spinner4"
Android:layout_width="15dp"
Android:layout_height="18dp"
Android:layout_alignBottom="@+id/linearLayout3"
Android:layout_alignLeft="@+id/linearLayout3"
Android:layout_alignRight="@+id/linearLayout3"
Android:layout_alignTop="@+id/linearLayout3"
/>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/linearLayout3"
Android:layout_marginTop="18dp"
Android:text="Add Amount"
Android:background="@drawable/buttonsty"/>
</RelativeLayout>
xmlの代わりにこのxmlをコピーして貼り付けます
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/back1"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginTop="20dp"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:dropDownWidth="fill_parent"
Android:background="@Android:drawable/btn_dropdown"
/>
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/linearLayout1"
Android:layout_alignRight="@+id/linearLayout1"
Android:layout_below="@+id/linearLayout1"
Android:layout_marginTop="25dp"
Android:background="@drawable/red"
Android:ems="10"
Android:hint="enter card number" >
<requestFocus />
</EditText>
<LinearLayout
Android:id="@+id/linearLayout2"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/editText1"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="33dp"
Android:orientation="horizontal"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner3"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:background="@Android:drawable/btn_dropdown"
/>
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:background="@Android:drawable/btn_dropdown"
/>
<EditText
Android:id="@+id/editText2"
Android:layout_width="22dp"
Android:layout_height="match_parent"
Android:layout_weight="0.18"
Android:ems="10"
Android:hint="enter cvv" />
</LinearLayout>
<LinearLayout
Android:id="@+id/linearLayout3"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignRight="@+id/linearLayout2"
Android:layout_below="@+id/linearLayout2"
Android:layout_marginTop="26dp"
Android:orientation="vertical"
Android:background="@drawable/red" >
</LinearLayout>
<Spinner
Android:id="@+id/spinner4"
Android:layout_width="15dp"
Android:layout_height="18dp"
Android:layout_alignBottom="@+id/linearLayout3"
Android:layout_alignLeft="@+id/linearLayout3"
Android:layout_alignRight="@+id/linearLayout3"
Android:layout_alignTop="@+id/linearLayout3"
Android:background="@Android:drawable/btn_dropdown"
/>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/linearLayout3"
Android:layout_marginTop="18dp"
Android:text="Add Amount"
Android:background="@drawable/buttonsty"/>
</RelativeLayout>
基本的に、スピナーのカスタム背景を作成する必要があります。次のようになります。
spinner_background.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<layer-list>
<item>
<color
Android:color="@Android:color/white"/>
</item>
<item>
<bitmap
Android:gravity="center_vertical|right"
Android:src="@drawable/ic_arrow_drop_down_black_24dp"/>
</item>
</layer-list>
</item>
</selector>
次に、スピナーのカスタムスタイルを作成します。ここでは、上記のセレクターを背景として指定します。
<style name="Widget.App.Spinner" parent="@style/Widget.AppCompat.Spinner">
<item name="overlapAnchor">true</item>
<item name="Android:background">@drawable/spinner_background</item>
</style>
最後に、アプリのテーマ全体で、アプリ全体に適用する場合は、2つの属性をオーバーライドする必要があります。
<item name="spinnerStyle">@style/Widget.App.Spinner</item>
<item name="Android:spinnerStyle">@style/Widget.App.Spinner</item>
そしてそれはほとんどそれです。
別の回答 のフォローアップとして、スピナーアイコンをどのように変更して次のようにするかを尋ねられました。
1つの非常に簡単な方法は、カスタムスピナーアイテムのレイアウトを使用することです:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.view_spinner_item,
ITEMS
);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
res/layout/view_spinner_item.xml
で、目的のアイコンを指すAndroid:drawableRight
でTextViewを定義します(必要に応じて、テキストサイズ、パディングなどのカスタマイズも行います)。
<?xml version="1.0" encoding="utf-8"?>
<!-- Custom spinner item layout -->
<TextView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerItemStyle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:singleLine="true"
Android:textSize="@dimen/text_size_medium"
Android:drawablePadding="@dimen/spacing_medium"
Android:drawableRight="@drawable/ic_arrow_down"
/>
(開いた状態では、Android.R.layout.simple_spinner_dropdown_item
を使用するか、スピナーのあらゆる側面を微調整する場合は、同様にカスタマイズされたレイアウトを作成します。)
背景と色をきれいに見せるには、スピナーのAndroid:background
とAndroid:popupBackground
を設定します 他の質問に示されているように 。上のスクリーンショットでカスタムフォントについて疑問に思っている場合は、 カスタムSpinnerAdapterが必要です 。
1つの簡単な方法は、スピナー+ドロップダウン矢印画像をレイアウト内にラップすることです。デフォルトの矢印アイコンが非表示になるように、スピナーの背景を透明に設定します。このようなもの:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/background"
Android:orientation="horizontal">
<Spinner
Android:id="@+id/spinner"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_weight="4"
Android:gravity="center"
Android:background="@Android:color/transparent"
Android:spinnerMode="dropdown" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_weight="1"
Android:onClick="showDropDown"
Android:src="@drawable/ic_chevron_down_blue" />
</LinearLayout>
ここで、background.xmlは、ボックスタイプの背景を作成するためのドロウアブルです。
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@Android:color/transparent" />
<corners Android:radius="2dp" />
<stroke
Android:width="1dp"
Android:color="#BDBDBD" />
</shape>
上記のコードは、このタイプのスピナーとアイコンを生成します。
Javaコードを使用してスピナースタイルを添付します。
まず、次のようなレイアウトファイルが必要です。
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="none"
Android:minHeight="?android:attr/listPreferredItemHeight" />
Spinner_item.xmlという名前を付けて、res/layoutsフォルダー内に配置します。
次に、String ArrayListを作成し、その中にすべてのSpinnerオプションを配置します。
ArrayList<String> spinnerArray = new ArrayList<String>();
spinnerArray.add("Item No. 1");
spinnerArray.add("Item No. 2");
spinnerArray.add("Item No. 3");
spinnerArray.add("Item No. 4");
最後に、Spinnerオブジェクトを作成し、それにスタイルレイアウトをアタッチします。
Spinner spinner = new Spinner(getActivity());
spinner.setTag("some_id");
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getActivity(), Android.R.layout.simple_spinner_dropdown_item, spinnerArray); spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
spinner.setAdapter(spinnerArrayAdapter);
これをフラグメント内からではなく、アクティビティ内から記述する場合、上記の行のSpinner(getActivity())はSpinner(this)に変更されることに注意してください。
それで全部です!
Androidレイアウトファイル内にスピナースタイルを添付します。
まず、スタイル属性を定義するxmlファイルを作成します(gradient_spinner.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item><layer-list>
<item><shape>
<gradient Android:angle="90" Android:type="linear" />
<stroke Android:width="1dp" Android:color="@color/colorBackground" />
<corners Android:radius="2dp" />
<padding Android:bottom="1dp" Android:left="1dp" Android:right="1dp" Android:top="1dp" />
</shape></item>
<item Android:right="5dp">
<bitmap Android:gravity="center_horizontal|right" Android:src="@drawable/expand_icon">
<padding Android:right="2dp" />
</bitmap>
</item>
</layer-list></item>
</selector>
次に、style.xmlファイル内でスタイルを指定し、背景としてgradient_spinnerを呼び出します
<style name="spinner_style">
<item name="Android:layout_width">match_parent</item>
<item name="Android:layout_height">wrap_content</item>
<item name="Android:background">@drawable/gradient_spinner</item>
<item name="Android:layout_margin">1dp</item>
<item name="Android:paddingLeft">5dp</item>
<item name="Android:paddingRight">5dp</item>
<item name="Android:paddingTop">5dp</item>
<item name="Android:paddingBottom">5dp</item>
</style>
最後に、上記のスタイルをスピナーに添付します。
<Spinner
Android:id="@+id/agent_id_spinner"
Android:layout_width="match_parent"
Android:layout_height="40dp"
Android:textSize="@dimen/title_text_view"
style="@style/spinner_style" />
それでおしまい!
<Spinner
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginRight="16dp"
Android:paddingLeft="10dp"
Android:spinnerMode="dropdown" />
dummy.xml(ドロアブルは非常に小さいサイズである必要があります。24dpを取得しています)
<?xml version="1.0" encoding="utf-8"?>
<layer-list Android:opacity="transparent" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:width="100dp" Android:gravity="right" Android:start="300dp">
<bitmap Android:src="@drawable/down_button_dummy_dummy" Android:gravity="center"/>
</item>
</layer-list>
レイアウトファイルスニペット
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
app:cardElevation="5dp"
>
<Spinner
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:background="@drawable/dummy">
</Spinner>
</Android.support.v7.widget.CardView>
このXMLをコピーして貼り付けてドロップダウンとして表示し、ドロップダウンの色を変更します
<?xml version="1.0" encoding="UTF-8"?><RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/back1"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginTop="20dp"
Android:background="@drawable/red">
<Spinner Android:id="@+id/spinner1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:dropDownWidth="fill_parent"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"
/>
</LinearLayout>
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/linearLayout1"
Android:layout_alignRight="@+id/linearLayout1"
Android:layout_below="@+id/linearLayout1"
Android:layout_marginTop="25dp"
Android:background="@drawable/red"
Android:ems="10"
Android:hint="enter card number" >
<requestFocus />
</EditText>
<LinearLayout
Android:id="@+id/linearLayout2"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignLeft="@+id/editText1"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="33dp"
Android:orientation="horizontal"
Android:background="@drawable/red">
<Spinner
Android:id="@+id/spinner3"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"
/>
<Spinner
Android:id="@+id/spinner2"
Android:layout_width="72dp"
Android:layout_height="wrap_content"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"
/>
<EditText
Android:id="@+id/editText2"
Android:layout_width="22dp"
Android:layout_height="match_parent"
Android:layout_weight="0.18"
Android:ems="10"
Android:hint="enter cvv" />
</LinearLayout>
<LinearLayout
Android:id="@+id/linearLayout3"
Android:layout_width="wrap_content"
Android:layout_height="55dp"
Android:layout_alignParentLeft="true"
Android:layout_alignRight="@+id/linearLayout2"
Android:layout_below="@+id/linearLayout2"
Android:layout_marginTop="26dp"
Android:orientation="vertical"
Android:background="@drawable/red" >
</LinearLayout>
<Spinner
Android:id="@+id/spinner4"
Android:layout_width="15dp"
Android:layout_height="18dp"
Android:layout_alignBottom="@+id/linearLayout3"
Android:layout_alignLeft="@+id/linearLayout3"
Android:layout_alignRight="@+id/linearLayout3"
Android:layout_alignTop="@+id/linearLayout3"
Android:popupBackground="@drawable/textbox"
Android:spinnerMode="dropdown"
Android:background="@drawable/drop_down_large"/>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/linearLayout3"
Android:layout_marginTop="18dp"
Android:text="Add Amount"
Android:background="@drawable/buttonsty"/>
APIレベル16以降では、次のコードを使用して、スピナーのドロップダウンアイコンを変更できます。 setonItemSelectedListenerのonItemSelectedに移動し、このように選択されたtextviewのドロアブルを変更します。
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// give the color which ever you want to give to spinner item in this line of code
//API Level 16 and above only.
((TextView)parent.getChildAt(position)).setCompoundDrawablesRelativeWithIntrinsicBounds(null,null,ContextCompat.getDrawable(Activity.this,R.drawable.icon),null);
//Basically itis changing the drawable of textview, we have change the textview left drawable.
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
それが誰かを助けることを願っています。
ドロップダウン矢印画像を次のようなスピナーに設定します。
<Spinner
Android:id="@+id/Exam_Course"
Android:layout_width="320dp"
Android:background="@drawable/spinner_bg"
Android:layout_height="wrap_content"/>
ここで、Android:background = "@ drawable/spinner_bg" spinner_bgはドロップダウン矢印画像です。