Android 动态多重微调器创建

Android Dynamic multiple spinners creation

我已经完成了关于 "Creating multiple spinners dynamically" 的所有答案,但是创建的多个微调器覆盖了之前生成的微调器。我们尝试使用 LayoutParams 和 params.setMargins,但无法为每一代微调器指定视图。

我的要求是生成 "n" 个微调器,其中 n 根据要求指定。 在每个微调器生成相互覆盖的地方部分工作的代码如下:

public class newstatusinfo extends AppCompatActivity {

List<String> values = new ArrayList<String>();
ArrayAdapter<String>a;

Spinner spin;

int a1=5,b1=5,c1=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.witnesslay);

    spin=(Spinner)findViewById(R.id.spinner21);

   LinearLayout.LayoutParams params = new       

   LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,    

   LinearLayout.LayoutParams.WRAP_CONTENT);
   for (int i = 0; i < 2; i++) {

       values.add(String.valueOf(a1));
       values.add(String.valueOf(b1));
       params.setMargins(0,a1,0,b1);
       System.out.println("a1:"+a1);
       System.out.println("b1:"+b1);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android 
       .R.layout.simple_spinner_dropdown_item, values);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item;     
        spin.setAdapter(adapter);
       spin.setLayoutParams(params);

        System.out.println("i:"+i);
       a1=a1+5;
       b1=b1+5;
    }

}}

截图如下:

我们需要的是像上图这样的多个微调器,一个一个垂直放置,每个微调器都有一组特定的值。

我怀疑这是否是您想要的。 enter image description here

你刚才说了

Creating multiple spinners dynamically

是指通过java代码动态生成View吗?如果是,请阅读我的code.I认为使用MARGIN和正确显示Spinner之间没有关联关系。

public class newstatusinfo extends AppCompatActivity {


    int a1 = 0, b1 = 5, c1 = 10;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout rootView = new LinearLayout(this);
        rootView.setOrientation(LinearLayout.HORIZONTAL);
        for (int i = 0; i < 3; i++) {
            Spinner spin = new Spinner(this);
            rootView.addView(spin);
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) spin.getLayoutParams();
            params.width = LinearLayout.LayoutParams.WRAP_CONTENT;
            params.height = LinearLayout.LayoutParams.WRAP_CONTENT;
            spin.setLayoutParams(params);

            List<String> values = new ArrayList<String>();
            values.add(String.valueOf(a1));
            values.add(String.valueOf(b1));
            values.add(String.valueOf(c1));
            System.out.println("a1:" + a1);
            System.out.println("b1:" + b1);
            System.out.println("c1:" + c1);

            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android
                    .R.layout.simple_spinner_dropdown_item, values);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spin.setAdapter(adapter);
            spin.setLayoutParams(params);

            System.out.println("i:" + i);
            a1 = a1 + 5;
            b1 = b1 + 5;
            c1 = c1 + 5;
        }
        setContentView(rootView);
    }
}

首先,英语不是我的母语。可能会有一些语法错误和误解。我会尽力理解你的问题并回答他们。 :-D 我们开始吧: 据我了解,您发出了两个问题:

1 How to set STYLE for spinners' arrow?

2 How to store values of all spinners?

首先,回答关于STYLE的问题。很抱歉,我没有找到如何完美设置箭头样式的方法。但我有两个建议:

1.1 您可以设置微调器箭头的颜色。像那样:

        int[][] states = new int[6][2];
        states[0] = new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled};
        states[1] = new int[]{android.R.attr.state_enabled, android.R.attr.state_focused};
        states[2] = new int[]{android.R.attr.state_enabled};
        states[3] = new int[]{android.R.attr.state_focused};
        states[4] = new int[]{android.R.attr.state_window_focused};
        states[5] = new int[]{};
        int[] colors = new int[]{0xffffffff, 0xffffff00, 0xff0000ff, 0xffff0000, 0xff0000ff, 0xffff0000};
        ColorStateList csl = new ColorStateList(states, colors);
        spin.setBackgroundTintList(csl);

或在 Spinner 的布局文件中将其声明为 Spinner 的 android:backgroundTint="#00ff00"。 如果您对上面的代码感到困惑。请Google这个词'ColorStateList',你就明白了。

1.2 您可以在微调器所在的位置放置一个 TextView。将 Spinner 的点击事件绑定到 TextView 上。然后你可以随意设置TextView的Style

2 存储值: 话不多说,直接给你看我的代码。

public class MainActivity extends AppCompatActivity {


    private List<List<String>> spinnersValues = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initData();//store the values of all spinners

        LinearLayout rootView = new LinearLayout(this);
        rootView.setOrientation(LinearLayout.HORIZONTAL);
        for (int i = 0; i < 3; i++) {
            Spinner spin = new Spinner(this);
            rootView.addView(spin);
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) spin.getLayoutParams();
            params.width = LinearLayout.LayoutParams.WRAP_CONTENT;
            params.height = LinearLayout.LayoutParams.WRAP_CONTENT;
            spin.setLayoutParams(params);

            List<String> values = spinnersValues.get(i);//fetch the values of one of the spinners

            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, values);
            spin.setAdapter(adapter);
            spin.setLayoutParams(params);

        }
        setContentView(rootView);
    }


    private void initData() {
        List<String> fruits = new ArrayList<String>();
        fruits.add("apple");
        fruits.add("pear");
        fruits.add("cherry");
        fruits.add("grape");

        List<String> furniture = new ArrayList<String>();
        furniture.add("desk");
        furniture.add("chair");
        furniture.add("bench");

        List<String> animals = new ArrayList<String>();
        animals.add("dog");
        animals.add("cat");
        animals.add("cow");
        animals.add("rabbit");
        animals.add("horse");
        animals.add("tiger");
        animals.add("lion");

        spinnersValues.add(fruits);
        spinnersValues.add(furniture);
        spinnersValues.add(animals);
    }
}