アラートダイアログ内にスピナーがあります。スピナーアイテム間のパディングを減らしたかったので、次のように実装しました。
spinner_row.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="30dp"
Android:background="#fff" >
<TextView
Android:id="@+id/tvCust"
Android:layout_width="200dp"
Android:layout_height="30dp"
Android:gravity="left|center_vertical"
Android:textColor="#000"
Android:textSize="15sp" />
<RadioButton
Android:layout_width="wrap_content"
Android:layout_height="30dp"
Android:layout_alignParentRight="true" />
</RelativeLayout>
アクティビティコードには次のものが含まれます:
spinner= (Spinner) dialog.findViewById(R.id.spinner);
String arr[] = { "1", "2", "3" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
CameraActivity.this, R.layout.spinner_row, R.id.tvCust,arr);
spinner.setAdapter(adapter);
以下のスクリーンショットでわかるように、ラジオボタンが実際にはspinner_row.xml
の一部であるスピナーに表示されています。テキストビューの幅は200dpですが、スピナーの長さは130dpしかないため、スピナーにラジオボタンが表示されるべきではないことに注意してください。どうすれば削除できますか?
また、スピナーアイテムのいずれかをクリックしても、スピナーポップアップが期待どおりに消えません(3つのチェックボックスすべてがスピナーアイテムリストでチェックされていることに注意してください)。アイテムのクリックでsetOnItemSelectedListener
が呼び出されません。
助けていただければ幸いです。
farrukhの提案に従って、私は彼のコードを試しましたが、次の結果が得られました。
私はこれを持っています
この
これらのxmlコードで
spinadapt.xmlという名前のアダプターの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="30dp"
Android:background="#fff" >
<TextView
Android:id="@+id/tvCust"
Android:layout_width="wrap_content"
Android:layout_height="30dp"
Android:layout_toLeftOf="@+id/radioButton1"
Android:gravity="left|center_vertical"
Android:textColor="#000"
Android:textSize="15sp" />
<RadioButton
Android:layout_width="wrap_content"
Android:layout_height="30dp"
Android:layout_alignParentRight="true" />
</RelativeLayout>
およびactivity_main.xmlという名前のメインレイアウト
<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">
<TextView
Android:id="@+id/spinner1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:hint="Select item"
Android:background="@drawable/spin"/>
</RelativeLayout>
およびJavaコードはMainActivity.Javaという名前のクラスです
public class MainActivity extends Activity
{
Spinner sp;
TextView tv;
String[] counting={"One","Two","Three","Four"};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp=new Spinner(this);
tv=(TextView)findViewById(R.id.spinner1);
tv.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
sp.performClick();
}
});
sp.setAdapter(new Adapter(MainActivity.this, counting));
sp.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
tv.setText(counting[arg2]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
}
});
}
}
およびAdapter.Javaという名前のアダプタクラス
public class Adapter extends BaseAdapter
{
LayoutInflater inflator;
String[] mCounting;
public Adapter( Context context ,String[] counting)
{
inflator = LayoutInflater.from(context);
mCounting=counting;
}
@Override
public int getCount()
{
return mCounting.length;
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
convertView = inflator.inflate(R.layout.spinadapt, null);
TextView tv = (TextView) convertView.findViewById(R.id.tvCust);
tv.setText(Integer.toString(position));
return convertView;
}
}
これは完璧に機能しています
これが役立つことを願っています