4

custom Spinner Dialogアプリ用に作成したい。私はこれこれを見つけました。どちらも良いです。要件に従ってコードを更新しました。ユーザーがスピナーをタップしたときにダイアログの背景ビューを変更するためにセレクターファイルを使用しています。

私のコードは完全に機能していますが、問題はダイアログ ビューにあります。その幅が広がっていますが、いくつかの修正サイズに従って取得したいと考えています。

私のスピナービューの現在の出力は次のとおりです:-

ここに画像の説明を入力

ここに画像の説明を入力

しかし、私は次のようにそれを必要とします:-

ここに画像の説明を入力

Spinner_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/spinner_popup" // it's my selector file
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/Genere_name"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_marginLeft="5dp"
        android:ellipsize="marquee"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textColor="@android:color/black"
        android:textSize="18sp"
        android:textStyle="bold" />

</LinearLayout>

spinner_popup.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/popup_header" android:state_selected="true"/>
    <item android:drawable="@android:color/transparent" android:state_enabled="true"/>
    <item android:drawable="@drawable/popup_header" android:state_pressed="true"/>
    <item android:drawable="@drawable/popup_bg_box" android:state_enabled="false" android:state_focused="true"/>
    <item android:drawable="@android:color/transparent"/>

</selector>

Main_spinner_view

<LinearLayout
    android:id="@+id/search_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/search_bg"
    android:orientation="horizontal"
    android:weightSum="3" >

    <Spinner
        android:id="@+id/Search_Spinner"
        android:layout_width="95dp"
        android:layout_height="30dp"
        android:layout_gravity="left|center_vertical|center_horizontal"
        android:layout_marginLeft="2dp"
        android:layout_weight="1.2"
        android:background="@drawable/search_dropdown" />

    <EditText
        android:id="@+id/Search_EDT"
        android:layout_width="170dp"
        android:layout_height="30dp"
        android:layout_gravity="center|center_horizontal|center_horizontal"
        android:layout_marginLeft="3dp"
        android:layout_weight="1.5"
        android:background="@drawable/search_textfield"
        android:hint="Search By Free Text"
        android:inputType="textPersonName"
        android:padding="5dp"
        android:textSize="16sp" >
    </EditText>

    <Button
        android:id="@+id/Search_GO"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="right|center_horizontal|center_vertical"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_weight="0.3"
        android:background="@drawable/search_icon"
        android:textColor="@android:color/white" />
</LinearLayout>

ここで、スピナーアダプターを呼び出しています

Search_Spinner.setAdapter(new MyAdapter(GridViewActivity.this,
                R.layout.spinner_item, Search_Category_List));

Java コードは必要ないと思いますが、それでもここに貼り付けます。

public class MyAdapter extends ArrayAdapter<String>
    {

        public MyAdapter(Context context, int textViewResourceId,
                ArrayList<String> objects)
        {
            super(context, textViewResourceId, objects);
        }

        @Override
        public View getDropDownView(int position, View convertView,
                ViewGroup parent)
        {

            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView,
                ViewGroup parent)
        {

            LayoutInflater inflater = getLayoutInflater();
            View row = inflater.inflate(R.layout.spinner_item, parent, false);
            TextView label = (TextView) row.findViewById(R.id.Genere_name);
            spinner_text = Typeface.createFromAsset(getAssets(), "desc.ttf");
            label.setTypeface(spinner_text);
            label.setText(Search_Category_List.get(position));

            return row;
        }
    }
4

3 に答える 3

1

このための透明なアクティビティを作成してみてください

ヘルプについては、以下のコードを参照してください。まず Spinner コントロールを削除し、そこにボタンを配置します。ボタンの背景をスピナーのように配置して、スピナーのように表示します。

ボタンをクリックすると、このコードを使用します

Intent bookIntent = new Intent();
        bookIntent.setClass(MusicAppActivity.this, OptionActivity.class);
        bookIntent.putExtra("cat", stockArr);
        startActivityForResult(bookIntent, 1);




bookIntent.putExtra("cat", stockArr);

ここからインテントで配列を渡す これは、新しいtransperentアクティビティで表示したい配列です。

OptionActivity

OptionActivity という透過的なアクティビティを 1 つ作成します。

その透過的なアクティビティでリストを作成します。アクティビティの幅と高さを設定します

透過的なアクティビティ コードは以下のとおりです

public class OptionActivity extends Activity {
    ListView l;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);

        Intent intent = getIntent();
          String[] myStrings = intent.getStringArrayExtra("cat");


         l = (ListView) findViewById(R.id.optionList);

        l.setAdapter(new ArrayAdapter<String>(this, R.layout.headerlist,R.id.text1, myStrings));
        l.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                  String book = l.getAdapter().getItem(position).toString();
                  Intent returnIntent = new Intent();
                  returnIntent.putExtra("SelectedBook",book);
                  setResult(RESULT_OK,returnIntent);       
                  finish();


            }
        });


    }


}

list.xml ファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/optionFinish"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/my_custom_background"
    android:layout_marginTop="50dp"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/headerbg" >

        <TextView
            android:id="@+id/viewTournament"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:freezesText="true"
            android:gravity="center_vertical|center_horizontal"
            android:marqueeRepeatLimit="marquee_forever"
            android:paddingLeft="15dip"
            android:paddingRight="40dip"
            android:scrollHorizontally="true"
            android:singleLine="true"
            android:text="Catagory"
            android:textColor="@android:color/white" />

        <!-- <ImageButton
            android:id="@+id/optionBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@android:color/transparent"
            android:padding="5dip"
            android:src="@drawable/options" /> -->
    </RelativeLayout>

    <ListView
        android:id="@+id/optionList"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:cacheColorHint="#00000000"
        android:background="@android:color/white"
        android:paddingLeft="2dip"
        android:paddingRight="2dip" >
    </ListView>

</LinearLayout>
于 2013-02-22T12:11:19.503 に答える
0

LinearLayout で android:layout_width="fill_parent" の代わりに android:layout_width="wrap_content" を使用する

于 2013-02-22T09:57:05.247 に答える
0

テキストビューの重みを 0.3 に、幅を 0dip に設定してみてください。textView で maxWidth を設定することもできます。また、幅が textView の幅になるため、スピナー項目ではなく textView に対して背景色を設定する必要があります。

setDropDownWidth を使用することもできますが、そのためには minApiLevel を 16 に設定する必要があります。詳細については、これを参照できます: http://developer.android.com/reference/android/widget/Spinner.html#attr_android:dropDownVerticalOffset

于 2013-02-22T09:44:41.560 に答える