示例#1
0
  public static ScrollView generateTeamLayout(Context context, boolean pit) {
    RelativeLayout layout = new RelativeLayout(context);
    ScrollView scrollView = new ScrollView(context);
    BufferedReader reader =
        new BufferedReader(
            new InputStreamReader(
                context
                    .getResources()
                    .openRawResource(pit ? R.raw.team_config_pit : R.raw.team_config_match)));
    try {
      String line = reader.readLine(); // The version
      Log.d(
          MainActivity.APP_TAG,
          "Loaded " + (pit ? "pit" : "match") + " config file version " + line);
      if (pit) configVersionPit = line;
      else configVersionMatch = line;
      int last = -1;
      while ((line = reader.readLine()) != null) {
        TextView header = null;
        View[] view;
        int idOffset = Integer.MAX_VALUE;
        String[] l;
        if (line.contains(":")) {
          l = line.split(":");
          RelativeLayout.LayoutParams params =
              new RelativeLayout.LayoutParams(
                  RelativeLayout.LayoutParams.WRAP_CONTENT,
                  RelativeLayout.LayoutParams.WRAP_CONTENT);
          header = new TextView(context);
          header.setText(l[1].substring(2));
          header.setTextSize(20f);
          header.setId(idOffset - View.generateViewId());
          if (last != -1) {
            if (l[1].charAt(1) == '0') params.addRule(RelativeLayout.BELOW, last);
            else {
              params.addRule(RelativeLayout.RIGHT_OF, last);
              params.addRule(RelativeLayout.ALIGN_TOP, last);
            }
          }
          header.setPadding(
              header.getPaddingLeft(),
              header.getPaddingTop(),
              header.getPaddingRight() + 20,
              header.getPaddingBottom());
          header.setLayoutParams(params);
          boolean below = false;

          switch (Integer.parseInt(l[1].charAt(0) + "")) {
            case 0: // Checkbox
              view = new View[] {new CheckBox(context)};
              break;
            case 1: // Spinner
              Spinner spinner = new Spinner(context);
              ArrayList<String> l1 = new ArrayList<>();
              l1.add("None");
              l1.addAll(Arrays.asList(l[2].split(",")));
              spinner.setAdapter(
                  new ArrayAdapter<>(context, android.R.layout.simple_spinner_dropdown_item, l1));
              view = new View[] {spinner};
              break;
            case 2:
              { // Number
                EditText editText = new EditText(context);
                editText.setInputType(InputType.TYPE_CLASS_NUMBER);
                editText.setSingleLine();
                editText.setImeOptions(0x00000005); // Next
                view = new View[] {editText};
                break;
              }
            case 3:
              { // Text
                EditText editText = new EditText(context);
                editText.setSingleLine();
                editText.setImeOptions(0x00000005); // Next
                view = new View[] {editText};
                break;
              }
            case 4: // Text for Teams
              AutoCompleteTextView autoCompleteTextView = new AutoCompleteTextView(context);
              autoCompleteTextView.setAdapter(
                  new ArrayAdapter<>(
                      context, android.R.layout.simple_dropdown_item_1line, MainActivity.teamList));
              autoCompleteTextView.setSingleLine();
              autoCompleteTextView.setImeOptions(0x00000005); // Next
              view = new View[] {autoCompleteTextView};
              break;
            case 5:
              { // Multiline field
                EditText editText = new EditText(context);
                editText.setSingleLine(false);
                view = new View[] {editText};
                below = true;
                break;
              }
            case 6:
              { // Number Entry with Plus
                final EditText editText = new EditText(context);
                ImageButton button = new ImageButton(context);
                button.setImageResource(R.drawable.ic_action_new);
                button.setOnClickListener(
                    new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                        if (editText.getText().toString().equals("")) editText.setText("1");
                        else
                          editText.setText(
                              "" + (Integer.parseInt(editText.getText().toString()) + 1));
                      }
                    });
                editText.setInputType(InputType.TYPE_CLASS_NUMBER);
                editText.setSingleLine();
                editText.setImeOptions(0x00000005); // Next
                view = new View[] {editText, button};
                break;
              }
            default:
              Log.e(
                  MainActivity.APP_TAG,
                  "Invalid file format for team config, error at line: " + line);
              return null;
          }

          if (view.length == 1) {
            RelativeLayout.LayoutParams params1 =
                new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            if (below) params1.addRule(RelativeLayout.BELOW, header.getId());
            else {
              params1.addRule(RelativeLayout.ALIGN_TOP, header.getId());
              params1.addRule(RelativeLayout.RIGHT_OF, header.getId());
            }
            view[0].setId(Integer.parseInt(l[0]));
            view[0].setLayoutParams(params1);
          } else {
            for (int i = 0; i < view.length; i++) {
              RelativeLayout.LayoutParams params1 =
                  new RelativeLayout.LayoutParams(
                      RelativeLayout.LayoutParams.WRAP_CONTENT,
                      RelativeLayout.LayoutParams.WRAP_CONTENT);
              if (i == 0) {
                if (below) params1.addRule(RelativeLayout.BELOW, header.getId());
                else {
                  params1.addRule(RelativeLayout.ALIGN_TOP, header.getId());
                  params1.addRule(RelativeLayout.RIGHT_OF, header.getId());
                }
                view[0].setId(Integer.parseInt(l[0]));
                view[0].setLayoutParams(params1);
                continue;
              }
              params1.addRule(RelativeLayout.ALIGN_TOP, view[i - 1].getId());
              params1.addRule(RelativeLayout.RIGHT_OF, view[i - 1].getId());

              view[i].setId(Integer.parseInt(l[0]) + i);
              view[i].setLayoutParams(params1);
            }
          }
        } else {
          RelativeLayout.LayoutParams params =
              new RelativeLayout.LayoutParams(
                  RelativeLayout.LayoutParams.WRAP_CONTENT,
                  RelativeLayout.LayoutParams.WRAP_CONTENT);
          TextView v = new TextView(context);
          v.setText(line);
          v.setTextSize(30f);
          v.setId(idOffset - View.generateViewId());
          if (last != -1) params.addRule(RelativeLayout.BELOW, last);
          v.setLayoutParams(params);
          view = new View[] {v};
        }

        if (header != null) layout.addView(header);
        for (View v : view) layout.addView(v);
        last = view[view.length - 1].getId();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    scrollView.addView(layout);
    return scrollView;
  }