0

問題


私はTextViewお互いの下にいくつかの s を配置しようとしましたが、うまくいかないようです。それらは、互いの下に配置されるのではなく、常に互いに重なり合います。

私は何を試しましたか


私は重力( a では機能しませんRelativeLayout)、およびあらゆる種類のレイアウトパラメーターをいじってみました。私にとって最良の解決策は、RelativeLayout.BELOWパラメーターを使用することであると結論付けました。唯一の問題は、以前の id を見つけようとしていることですTextView。 イテレータを使用し

て s の ID を割り当てます。TextViewIDとしてカウントするために iterator - 1 を使用できないようです(SOに関する他の回答ではこれが機能することが示唆されていますが)。TextView次の反復で使用するために、現在の値を「previous_tv」変数に 割り当てようとさえしました。使用して配置したばかりの id の正しいイテレータ値を

見つけようとしましたが、これも機能しませんでした。 TextViewthis.findViewByID

コード


パラメータ ルールの ID として何を配置する必要があるかを把握しようとしています。これは私が参照しているコードです-編集、リクエストごとに完全なコードを配置-:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); //Don't show application name on the top of the screen (valuable space)
    setContentView(R.layout.activity_task_play); //Set which layout file to use for this activity

    //Get the Task that was sent by TaskActivity
    this.task = (Task) this.getIntent().getSerializableExtra("TASK_OBJECT");
    //Get the Sums for this Task
    this.sums = this.task.getSums();

    //GridView setup
    this.gridview = (GridView) this.findViewById(R.id.gridView_task_play);

    ArrayAdapter<String> adapter = this.task.getArrayAdapterForGridView(this);

    this.gridview.setAdapter(adapter);

    //TextView setup
    RelativeLayout layout = (RelativeLayout) this.findViewById(R.id.activity_task_play_relative);

    for(int i = 0; i < this.sums.length; i++)
    {
        //Layout parameters
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);

        //This variable counts how many times the placeholder text is skipped and a operator (+-/ etc.) is placed in the sum_text.
        //This is usefull for placing the correct placeholder for each number in the sum (a, b, c etc.)
        int times_skipped = 0; 

        TextView tv = new TextView(this);

        String sum_text = "";

        for(int j = 0; j < this.sums[i].getVariables().length; j++)
        {               
            if(this.isParsable(this.sums[i].getVariables()[j]))
            {
                sum_text += TaskPlayActivity.PLACEHOLDERS[(j - times_skipped)] + " ";
            }
            else
            {
                sum_text += this.sums[i].getVariables()[j] + " ";
                times_skipped++;
            }
        }

        if(i > 0) 
        {
            params.addRule(RelativeLayout.BELOW, i - 1);
        }
        tv.setId(i);
        tv.setText(sum_text + "= " + this.sums[i].getAnswer());
        tv.setTextColor(TaskPlayActivity.COLOURS[i]);
        tv.setTextSize(25);
        tv.setLayoutParams(params);
        layout.addView(tv);
    }
}



XML

XML を追加しました。私はレイアウトがあまり得意ではないので、ここに障害がある可能性が非常に高いです。

<RelativeLayout 
    android:id="@+id/activity_task_play_relative"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <RelativeLayout 
        android:layout_width="wrap_content"
        android:layout_height="220dip"
        android:layout_alignParentBottom="true">

        <GridView
            android:id="@+id/gridView_task_play"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="#EFEFEF"
            android:horizontalSpacing="1dp"
            android:numColumns="3"
            android:paddingTop="1dp"
            android:verticalSpacing="1dp" >

        </GridView>

    </RelativeLayout>

</RelativeLayout>

他の提案も歓迎しますが、RelativeLayout. 前もって感謝します。

4

2 に答える 2

1

View#setIdのドキュメントには、識別子は正の数である必要があると記載されているため、識別子の値としてゼロを使用しないようにしてください。

また、TextView ごとに新しい LayoutParams インスタンスを作成する必要があります。すべての TextView が同じ LayoutParams オブジェクトを共有しているため、その 1 つのオブジェクトへの変更はすべての TextView に影響します。

そして、View#generateViewIdを使用して ID を生成し、最後の反復の ID を覚えておくことができます。

于 2013-05-10T16:26:54.610 に答える
0

このコードをループで呼び出しているようです。その場合i - 1、ルールの ID として (前のビュー ID) を入力します。

于 2013-05-10T16:22:52.897 に答える