Android Dynamic多个微调器创建

时间:2017-07-13 06:43:51

标签: android dynamic android-spinner

我已经完成了关于"动态创建多个微调器的所有答案",但是创建的多个微调器超过了先前生成的微调器。我们尝试使用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

我们需要的是像上面的图像一样一个接一个的多个微调器,每个都有一组特定的值。

2 个答案:

答案 0 :(得分:3)

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

你刚才说过

  

动态创建多个微调器

是否意味着java代码动态生成视图?如果是这样,请阅读我的代码。我认为使用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);
    }
}

答案 1 :(得分:0)

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

  

1如何为纺纱厂设定STYLE&#39;箭头?

     

2如何存储所有微调器的值?

首先,回答关于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的布局文件中将其声明为android:backgroundTint="#00ff00",用于Spinner。 如果您对上面的代码感到困惑。请谷歌“ColorStateList&#39;”这个词,然后你会理解它。 arrow color changed

1.2 您可以将TextView放置在微调器所在的位置。将Spinner的click事件绑定到TextView。然后,您可以根据需要设置TextView的样式。

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);
    }
}