内ののSpinner
各行にを入れようとしています。ListView
ListFragment
ストアのように縦のオーバーフロー画像のように見せたいのですが、クリックしてオプションを表示できる縦のオーバーフロー画像を表示する方法がわかりません。
代わりに、常に以下のようになります。「オプション」を削除して、代わりにオーバーフロー画像を作成したいと思います。
どんな助けでも大歓迎です。
内ののSpinner
各行にを入れようとしています。ListView
ListFragment
ストアのように縦のオーバーフロー画像のように見せたいのですが、クリックしてオプションを表示できる縦のオーバーフロー画像を表示する方法がわかりません。
代わりに、常に以下のようになります。「オプション」を削除して、代わりにオーバーフロー画像を作成したいと思います。
どんな助けでも大歓迎です。
他の投稿から関連するアイデアを見つけて組み合わせました。StackOverflowに感謝します。
Android:スピナーセレクターを独自の画像/アイコンに設定するにはどうすればよいですか?
アイデアは、その上に0dp幅を作成するSpinner
ことImageView
です。画像をクリックすると、ドロップダウンが表示されます。スピナーが画面の端にあるときの動作はまだテストしておらず、問題が発生する可能性があります。スピナーの位置も微調整する必要がありますが、これは今のところ機能します。
私の計画は、スピナーからの選択をキャッチし、クリックされたものに基づいてダイアログ/インテントを開くことです。これがその様子です。(ImageViewはかすかなですが、今のところほとんどの場合、私にとってはプレースホドラーです)
クリックする前に
クリック後
これは他の人にとって望ましいと思われるので、私が使用した一般的なコードです。
values / attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="OverflowSpinner">
<attr name="imageResource" format="string" />
<attr name="spinnerTextResource" format="string" />
</declare-styleable>
</resources>
values /strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="spinner_array">
<item>Skip</item>
<item>View log</item>
</string-array>
</resources>
layouts / row.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:awesome="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- stuff -->
<com.blah.package.OverflowSpinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
awesome:imageResource="@drawable/ic_menu_moreoverflow_normal_holo_light"
awesome:spinnerTextResource="@array/spinner_array"
/>
</RelativeLayout>
OverflowSpinner.java
public class OverflowSpinner extends RelativeLayout {
int mImage;
int mStrings;
public OverflowSpinner(Context context) {
super(context);
}
public OverflowSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
setupDisplay(context);
}
public OverflowSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
setupDisplay(context);
}
private void init(AttributeSet attrs) {
TypedArray attribs = getContext().obtainStyledAttributes(attrs, R.styleable.OverflowSpinner);
// get attributes
mImage = attribs.getResourceId(R.styleable.OverflowSpinner_imageResource, -1);
mStrings = attribs.getResourceId(R.styleable.OverflowSpinner_spinnerTextResource, -1);
attribs.recycle();
}
private void setupDisplay(Context context) {
BitmapDrawable bitmap = (BitmapDrawable)this.getResources().getDrawable(mImage);
int height = bitmap.getBitmap().getHeight();
// set size of Spinner to 0 x height so it's "hidden"
// the height is used to help position the Spinner in a nicer spot
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, mStrings, android.R.layout.simple_spinner_item);
// setup spinner
final Spinner spinner = new Spinner(context);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setLayoutParams(lp);
this.addView(spinner);
// set size of image to be normal
lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(ALIGN_PARENT_BOTTOM);
ImageButton option = new ImageButton(context);
option.setBackgroundResource(android.R.color.transparent);
option.setImageResource(mImage);
option.setLayoutParams(lp);
// when clicking the image button, trigger the spinner to show
option.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
spinner.performClick();
}
});
this.addView(option);
}
}