我正在尝试使用带有自定义下拉菜单的两个微调器,只有底部显示下拉时自定义布局。我一直在努力找出原因,但我不能。
public class setup extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setuplayout);
Spinner spinner1 = (Spinner) findViewById(R.id.Spinner01);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.numberPlayers, R.layout.spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner1.setAdapter(adapter);
Spinner spinner2 = (Spinner) findViewById(R.id.Spinner02);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,
R.array.gameDifficulty, R.layout.spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner2.setAdapter(adapter2);
}
}
这是上面提到的spinner_item的xml代码。
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:textColor="#F9B12F"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="left"
android:padding="5dip"
android:popupBackground="#000000"
android:background="#000000"
/>
这是setuplayout xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView android:id="@+id/mainSetupImage"
android:src="@drawable/setup"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ImageView>
<ImageView
android:id="@+id/players"
android:clickable="true"
android:src="@drawable/players"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerVertical="true">
</ImageView>
<Spinner
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawSelectorOnTop="true"
android:id="@+id/Spinner01"
android:textColor="#F9B12F"
android:layout_toRightOf="@+id/players"
android:layout_marginLeft="25dp"
android:layout_centerVertical="true"
android:background="@drawable/spinner"/>
<Spinner
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawSelectorOnTop="true"
android:id="@+id/Spinner02"
android:textColor="#F9B12F"
android:layout_below="@+id/Spinner01"
android:layout_toRightOf="@+id/difficulty"
android:layout_marginTop="25dp"
android:background="@drawable/spinner"/>
<ImageView
android:id="@+id/difficulty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignTop="@+id/Spinner02"
android:clickable="true"
android:src="@drawable/difficulty" />
</RelativeLayout>
答案 0 :(得分:0)
在第二个微调器中你使用了适配器而不是适配器2。所以使用adapter2并运行你的代码希望它会运行。 :)
答案 1 :(得分:0)
我在你的帮助下想出来了。我使用了代码“adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)”,它覆盖了我的自定义布局。感谢您突出显示两个代码的不同之处。这是一个巨大的帮助。我删除了引用的行,现在可以了。
答案 2 :(得分:0)
我想分享一些代码,这些代码可以让所有人的代码在制作ArrayAdapter时更加清晰。
只需在您偏好的类中定义静态方法(甚至是MainActivity ...),为您提供数组适配器,而不会污染您的代码:
public static ArrayAdapter<CharSequence>
getArrayAdapter( Context c, int arrayId, int idLayout1, int idLayout2){
ArrayAdapter<CharSequence> aa;
aa = ArrayAdapter.createFromResource( c, arrayId , idLayout1);
aa.setDropDownViewResource( idLayout2);
return aa;
}
然后在你的代码中你只需要这样做:
myspinner.addAdapter(
this, ThatClass.getArrayAdapter(
R.array.myid, R.layout.id1, R.layout.id2 );
myspinner.setOnItemSelectedListener(this);
/* Remember that the default Android Spinner layout can be get passing these specific layout ids:
android.R.layout.simple_spinner_item as layout1
android.R.layout.simple_spinner_dropdown_item as layout2
*/