0

ビューの組み合わせを確立しようとしています。それらは常に上部にButtonEdittextボックスを水平に並べて配置し、その下にTextviewsの垂直リストを配置する必要があります。ユーザーがTextViewを下にスクロールできるように、垂直方向のリストをScrollViewで囲む必要があります(これが発生している間、上部のButtonEditTextは引き続き表示されます)。

protected void initLayout() {
    // Declaring the vertical layout
    verticalLayout=new LinearLayout(this);
    verticalLayout.setOrientation(LinearLayout.VERTICAL);
            //Declaring the horizontal layout
    horizontalLayout=new LinearLayout(this);
    horizontalLayout.setOrientation(LinearLayout.HORIZONTAL);
            //set the main view as horizontal at the top
    setContentView(horizontalLayout);
            //Declaring the scroll view
    ScrollView scrollView= new ScrollView(this); 
    scrollView.addView(verticalLayout);
            //set the scroll view
    setContentView(scrollView);
    //declare and add button to horizontal view
    theButton= new Button(this);
    theButton.setText("Add Joke");
    horizontalLayout.addView(theButton);
    //declare and add edittext to horizontal view
    theEditText= new EditText(this);
    theEditText.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
    horizontalLayout.addView(theEditText);
}

setContentView で間違っている可能性があると思いますが、完全にはわかりません。

4

3 に答える 3

0

問題の解決策を見つけました。水平レイアウトと垂直レイアウトの両方を別の線形レイアウト内にカプセル化し、それをルート ビューとして設定する必要がありました。

protected void initLayout() {
    // Declaring the vertical layout
    verticalLayout=new LinearLayout(this);
    verticalLayout.setOrientation(LinearLayout.VERTICAL);

    //Declaring the horizontal layout
    horizontalLayout=new LinearLayout(this);
    horizontalLayout.setOrientation(LinearLayout.HORIZONTAL);

    //***SOLUTION*** Create a view to group the other views in
    groupLayout=new LinearLayout(this);
    groupLayout.setOrientation(LinearLayout.VERTICAL);//vertical as the horizontal view is on top of the vertical view

    //Declaring the scroll view
    ScrollView scrollView= new ScrollView(this); 
    scrollView.addView(verticalLayout);//the vertical layout is the only view that should be scrollable and therefore added to the scrollview

    //declare and add button to horizontal view
    theButton= new Button(this);
    theButton.setText("Add Joke");
    horizontalLayout.addView(theButton);
    //declare and add edittext to horizontal view
    theEditText= new EditText(this);
    theEditText.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
    horizontalLayout.addView(theEditText);

    //***SOLUTION*** attach the views to the group view
    groupLayout.addView(horizontalLayout); //the layout displayed at the top of the group layout
    groupLayout.addView(scrollView); //the layout below the top (scrollview already contains the vertical view)

    setContentView(groupLayout);//assign the group layout to the content
}
于 2013-10-08T18:33:12.800 に答える
0

親の ViewGroup は 1 つでなければなりません。setContentView を 2 回使用していますが、これは間違いです。1つだけを使用し、他のlinearlayoutを子として別のものに追加します。xml で実行してから、そのようにコードを記述した方がよいと思います。

于 2013-10-04T20:55:21.510 に答える
0

基本的に、setContentView が間違っています...
xml でレイアウトを定義することを強くお勧めします。次に、次のように一度だけ設定します。

setContentView(R.layout.my_xml_layout);

このようにすると、通常は自分のレイアウトを見ることができ、(私の意見では) レイアウトを定義する方が簡単です (特に、これをいつか変更することにした場合)。

ただし、コードで実行したくない場合は、次のようにする必要があります (テストされていませんが、動作するはずです)。

protected void initLayout() {
// Declaring the vertical layout
verticalLayout=new LinearLayout(this);
verticalLayout.setOrientation(LinearLayout.VERTICAL);

//Declaring the horizontal layout
horizontalLayout=new LinearLayout(this);
horizontalLayout.setOrientation(LinearLayout.HORIZONTAL);
verticalLayout.addView(horizontalLayout); //add the Horizontal-View to the parent-grid

//Declaring the scroll view
ScrollView scrollView= new ScrollView(this); 
scrollView.addView(verticalLayout);
//set the scroll view
verticalLayout.addView(scrollView); //add the scrollview to the parent-grid
//declare and add button to horizontal view
theButton= new Button(this);
theButton.setText("Add Joke");
horizontalLayout.addView(theButton);
//declare and add edittext to horizontal view
theEditText= new EditText(this);
theEditText.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
horizontalLayout.addView(theEditText);
setContentView(verticalLayout);
}

編集: 申し訳ありません - 最初にいくつかのエラーがありました - 今編集しました。このように動作するはずです。

于 2013-10-04T21:01:21.187 に答える