簡體   English   中英

使用可繪制資源為微調器中的項目設置背景-Java Android Studio

[英]Set background for items in a spinner using a drawable resource - java android studio

我使用以下代碼創建了一個微調器。 現在,我想使用一個名為circle.xml的可繪制資源,為微調器中的每個項目設置背景,以使每個數字都顯示在一個圓圈內。

        Spinner equationSpinner = new Spinner(this);

        ArrayList<String> spinnerArray = new ArrayList<String>();
        spinnerArray.add("");
        spinnerArray.add("1");
        spinnerArray.add("2");
        spinnerArray.add("3");
        spinnerArray.add("4");
        spinnerArray.add("5");

        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, spinnerArray);
        equationSpinner.setAdapter(spinnerArrayAdapter);

我可以將圓圈用作TextView中的背景,所以我嘗試將spinnerArray創建為TextViews的數組,但似乎與simple_spinner_dropdown_item不兼容。 有人知道我該怎么做嗎? 我只希望每個數字出現在微調器的圓圈內。 我還需要能夠訪問微調器中選擇的號碼。 謝謝

PS與Android一樣,Android中有什么方法可以創建“老虎機”風格的微調器? 我更喜歡那些外觀。

編輯:我現在發現我可以通過創建這樣的自定義布局(稱為spinner_item.xml)來使用我的圈子資源:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="28dip"
    android:layout_height="28dip"
    android:gravity="center"
    android:textSize="20sp"
    android:background="@drawable/circle"
    android:textColor="#ff0000" />

然后,以編程方式為我的微調器設置適配器,如下所示:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.equations, R.layout.spinner_item);
        adapter.setDropDownViewResource(R.layout.spinner_item);
        equationSpinner.setAdapter(adapter);

但是,此方法要求我在strings.xml文件(R.array.equations)中設置了預定義的字符串數組。 我需要能夠根據應用程序的狀態指定要以編程方式使用的字符串數組。 陣列設置好后是否可以對其進行修改?

編輯2:此外,我發現我可以設置下拉菜單項的背景,並使用自己的程序化數組,如下所示:

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, spinnerArray);
        spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
        equationSpinner.setAdapter(spinnerArrayAdapter);

唯一的問題就是能夠將資源應用於微調框本身的背景(而不是下拉菜單項)。 主微調器項目似乎沒有與setDropDownViewResource等效的對象。

可以說textview_background.xml是您要給textView給Spinner的背景

在drawable中創建一個文件並將其命名為textview_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/holo_blue_dark" />
<corners android:radius="7dp" />
<stroke
    android:width="3dp"
    android:color="@android:color/tertiary_text_light" />
</shape>

做一個Spinner你的活動

 <Spinner
    android:id="@+id/SpinnerOneActivity_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

使用名稱list_text_view.xml進行布局

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:padding="4dp"
android:text="some"
android:background="@drawable/textview_background"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="@android:color/black" />

創建一個將數據從列表填充到微調器的類,在此代碼中,您的Adapter類正在獲取String的列表,但是您可以給自己提供自定義對象列表以填充微調器,請注意適配器的構造函數參數。

第一Context

第二個layout which will be given to each item in spinner

第三- a textView id from the above layout

第四- your list of objects which you want to populate

TestAdapter.java

public class TestAdapter extends ArrayAdapter {

private ArrayList<String> strings;
private Context context;
private LayoutInflater layoutInflater;

public TestAdapter(Context context, int resource,int id, ArrayList<String> strings) {
    super(context, resource, id, strings);
    this.context = context;
    this.strings = strings;
    this.layoutInflater = LayoutInflater.from(this.context);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = layoutInflater.inflate(R.layout.list_text_view, parent, false);
    TextView textView = (TextView) view.findViewById(R.id.text1);
    textView.setText("" + strings.get(position));
    return view;
}
}

在您的活動中,您可以編寫此代碼

 ArrayList<String> list = new ArrayList<>();
    list.add("one");
    list.add("Two");
    list.add("Three");
    list.add("four");
    Spinner spinner = (Spinner) findViewById(R.id.SpinnerOneActivity_spinner);
    spinner.setAdapter(new TestAdapter(getApplicationContext(), R.layout.list_text_view, R.id.text1,list));

如您所願,您可以增加列表或動態生成事物,以將列表附加到將提供給Spinner的適配器上后,將其添加到列表中或從列表中刪除,您可以在適配器上調用notifyDataSetChanged()來更新列表

檢查有關Android Wheel的以下答案: https : //stackoverflow.com/a/9503372/3677394

有一個非常好的第三方開源項目,稱為Android Wheel,它幾乎可以為您創建投幣機。 而且,如果您想對其進行自定義,它是在Apache許可下的,因此那里沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM