0

相対レイアウトに少し問題があります。私は、.CSV ファイルからいくつかの値を読み取り、それらを相対レイアウトで動的に表示する必要があるプロジェクトを行っています。いくつかのコード スニペットと画像を配置し、問題を説明します。

最初のコード スニペット:

package ekalavya.pratnala.quiz;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.StringTokenizer;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;

public class QuizActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Beginning of variable declarations
    File quizSpecs = new File("mnt/sdcard/teacher.csv"); // Read the file
    BufferedReader csvReader = null;
    String line = ""; // Storing each line in a string
    StringTokenizer currentLine = null;
    int noOfQuestions = 0; // Number of questions in the quiz
    int time = 0; // Duration of the quiz
    int[][] quizData; // Storing the quiz specifications in an integer array
    int i = 0, j = 0; // Loop variables
    int[][] questionImages = {
            { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d,
                    R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h,
                    R.drawable.i, R.drawable.j },
            { R.drawable.a_checked, R.drawable.b_checked,
                    R.drawable.c_checked, R.drawable.d_checked,
                    R.drawable.e_checked, R.drawable.f_checked,
                    R.drawable.g_checked, R.drawable.h_checked,
                    R.drawable.i_checked, R.drawable.j_checked },
            { R.drawable.zero, R.drawable.one, R.drawable.two,
                    R.drawable.three, R.drawable.four, R.drawable.five,
                    R.drawable.six, R.drawable.seven, R.drawable.eight,
                    R.drawable.nine },
            { R.drawable.zero_checked, R.drawable.one_checked,
                    R.drawable.two_checked, R.drawable.three_checked,
                    R.drawable.four_checked, R.drawable.five_checked,
                    R.drawable.six_checked, R.drawable.seven_checked,
                    R.drawable.eight_checked, R.drawable.nine_checked } };
    // End of variable declarations

    try {
        csvReader = new BufferedReader(new FileReader(quizSpecs));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        line = csvReader.readLine();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    currentLine = new StringTokenizer(line, ",");
    noOfQuestions = Integer.parseInt(currentLine.nextToken());
    time = Integer.parseInt(currentLine.nextToken());
    while (currentLine.hasMoreTokens())
        ;
    quizData = new int[noOfQuestions][6];
    for (i = 0; i < noOfQuestions; i++) {
        try {
            line = csvReader.readLine();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        currentLine = new StringTokenizer(line, ",");
        for (j = 0; j < 6; j++) {
            quizData[i][j] = Integer.parseInt(currentLine.nextToken());
        }
    }
    try {
        csvReader.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ScrollView s1 = new ScrollView(this);
    RelativeLayout r1 = new RelativeLayout(this);
    for (i = 0; i < 2; i++) {
        switch (quizData[i][1]) {
        case 1:
        case 2:
            for (j = 0; j < quizData[i][2]; j++) {
                ImageView option = new ImageView(this);
                option.setImageResource(questionImages[0][j]);
                option.setId(j + (10 * (i + 1)));
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.addRule(RelativeLayout.RIGHT_OF, j - 1
                        + (10 * (i + 1)));
                option.setLayoutParams(params);
                r1.addView(option, params);
            }
            break;
        }
    }
    s1.addView(r1, new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.FILL_PARENT));
    this.setContentView(s1);
}
}

画像 1: https://www.dropbox.com/s/vzpilyotvgtipbb/pic2.png

2 番目のコード スニペット:

package ekalavya.pratnala.quiz;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.StringTokenizer;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;

public class QuizActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Beginning of variable declarations
    File quizSpecs = new File("mnt/sdcard/teacher.csv"); // Read the file
    BufferedReader csvReader = null;
    String line = ""; // Storing each line in a string
    StringTokenizer currentLine = null;
    int noOfQuestions = 0; // Number of questions in the quiz
    int time = 0; // Duration of the quiz
    int[][] quizData; // Storing the quiz specifications in an integer array
    int i = 0, j = 0; // Loop variables
    int[][] questionImages = {
            { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d,
                    R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h,
                    R.drawable.i, R.drawable.j },
            { R.drawable.a_checked, R.drawable.b_checked,
                    R.drawable.c_checked, R.drawable.d_checked,
                    R.drawable.e_checked, R.drawable.f_checked,
                    R.drawable.g_checked, R.drawable.h_checked,
                    R.drawable.i_checked, R.drawable.j_checked },
            { R.drawable.zero, R.drawable.one, R.drawable.two,
                    R.drawable.three, R.drawable.four, R.drawable.five,
                    R.drawable.six, R.drawable.seven, R.drawable.eight,
                    R.drawable.nine },
            { R.drawable.zero_checked, R.drawable.one_checked,
                    R.drawable.two_checked, R.drawable.three_checked,
                    R.drawable.four_checked, R.drawable.five_checked,
                    R.drawable.six_checked, R.drawable.seven_checked,
                    R.drawable.eight_checked, R.drawable.nine_checked } };
    // End of variable declarations

    try {
        csvReader = new BufferedReader(new FileReader(quizSpecs));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        line = csvReader.readLine();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    currentLine = new StringTokenizer(line, ",");
    noOfQuestions = Integer.parseInt(currentLine.nextToken());
    time = Integer.parseInt(currentLine.nextToken());
    while (currentLine.hasMoreTokens())
        ;
    quizData = new int[noOfQuestions][6];
    for (i = 0; i < noOfQuestions; i++) {
        try {
            line = csvReader.readLine();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        currentLine = new StringTokenizer(line, ",");
        for (j = 0; j < 6; j++) {
            quizData[i][j] = Integer.parseInt(currentLine.nextToken());
        }
    }
    try {
        csvReader.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ScrollView s1 = new ScrollView(this);
    RelativeLayout r1 = new RelativeLayout(this);
    for (i = 0; i < 1; i++) {
        switch (quizData[i][3]) {
        case 1:
        case 2:
            for (j = 0; j < quizData[i][2]; j++) {
                ImageView option = new ImageView(this);
                option.setImageResource(questionImages[0][j]);
                option.setId(j + (10 * (i + 1)));
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.addRule(RelativeLayout.RIGHT_OF, j - 1
                        + (10 * (i + 1)));
                option.setLayoutParams(params);
                r1.addView(option, params);
            }
            break;
        }
    }
    s1.addView(r1, new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.FILL_PARENT));
    this.setContentView(s1);
}
}

画像 2: https://www.dropbox.com/s/itazcpshjzbza4t/pic1.png

変数 'i' を使用した switch ケースのループが 1 回だけ実行されると、2 番目の出力が表示されます。2 回実行すると、最初の出力が表示されます。しかし、それは私が望むものではありません。最初の出力行が 2 番目の出力行の下に表示されるようにします。コードに問題があることはわかっていますが、それを修正する方法がわかりません。私を助けてください!また、それらの要素を画面上の任意の場所に配置する方法を知りたいです。

PS 評価が 10 未満であるため、画像をアップロードできませんでした (私は初心者です)。それで、私はそれらを Dropbox に置き、リンクをここに置きました。ご不便おかけしてすみません。

4

1 に答える 1

1

私はこれを解決しました:RIGHT_OF以前にプロパティのみを指定したため、垂直方向に配置する場所がわからなかったため、上部に配置しました。プロパティも指定するBELOWと、問題が修正されました。

于 2012-06-13T15:27:40.827 に答える