0

Android アプリでロックされた textField と ScrollView を使用しようとしています。実行時にそうしようとしていますが、何かが欠けています。最初に LinearLayout に追加したオブジェクトは、表示される唯一のものです。私は何が欠けていますか?私は xml レイアウト ファイルを介して何も定義していません。

私の主な活動は次のとおりです。

パッケージcom.example.scrolltest;

import com.example.scrolltest.Draw; android.widget.ScrollView をインポートします。android.widget.LinearLayout をインポートします。android.widget.TextView をインポートします。android.os.Bundle をインポートします。android.app.Activity をインポートします。android.graphics.Color をインポートします。

public class MainActivity extends Activity { Draw draw;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
protected void onResume(){
    super.onResume();

    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    int lHeight = LinearLayout.LayoutParams.MATCH_PARENT;
    int lWidth = LinearLayout.LayoutParams.MATCH_PARENT;        

    TextView tv = new TextView(this);
    tv.setText("Test text.  Boom.");

    draw = new Draw(this);
    draw.setBackgroundColor(Color.WHITE);
    ScrollView scrollView = new ScrollView(this);
    scrollView.addView(draw);

    // add the views to the layout
    ll.addView(scrollView, new LinearLayout.LayoutParams(lHeight, lWidth));

    ll.addView(tv, new LinearLayout.LayoutParams(lHeight, lWidth));

    setContentView(ll);

}

}

ScrollView のコンテンツは動的であり、いつでも変更できるため、ニヤニヤするために、Draw オブジェクトの静的な例を示します。

パッケージcom.example.scrolltest;

android.content.Context をインポートします。android.graphics.Canvas をインポートします。android.graphics.Color をインポートします。android.graphics.Paint をインポートします。android.view.View をインポートします。

public class Draw extends View { ペイント paint = new Paint();

public Draw(Context context) {
    super(context);            
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // Compute the height required to render the view
    // Assume Width will always be MATCH_PARENT.
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = 4000 + 50; // Since 3000 is bottom of last Rect to be drawn added and 50 for padding.
    setMeasuredDimension(width, height);
}

@Override
public void onDraw(Canvas canvas) {
    paint.setColor(Color.BLUE);

    canvas.drawLine(100, 20, 100, 1900, paint);
    paint.setColor(Color.BLACK);
       canvas.drawText("00:00", 10, 10, paint);
       int y = 0;
       int x = 200;
    for(int i = 100; i < 2900; i=i+10){

       paint.setColor(Color.GREEN);
       canvas.drawRect(x, i, x+50, i+10, paint);

    if(y == 0){
        y = 1;
        x = 200;
    } else
   {
        y = 0;
        x = 30;
    }
    }
}

}

4

1 に答える 1

1

LinearLayout.LayoutParams.MATCH_PARENTの両方の幅と高さに使用しています。どちらのビューを最初に追加しても、LinearLayout 全体がいっぱいになり、他のビューが入る余地がなくなります。また、LinearLayout の向きを水平に設定していることに気付きました。これは、ではなく子ビューを積み重ねます。次の変更を提案します。TextViewScrollViewside by sideon top of each other

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
int lHeight = LinearLayout.LayoutParams.WRAP_CONTENT;
int lWidth = LinearLayout.LayoutParams.MATCH_PARENT;        

TextView tv = new TextView(this);
tv.setText("Test text.  Boom.");

draw = new Draw(this);
draw.setBackgroundColor(Color.WHITE);
ScrollView scrollView = new ScrollView(this);
scrollView.addView(draw);

ll.addView(tv, new LinearLayout.LayoutParams(lHeight, lWidth));

// add the views to the layout
ll.addView(scrollView, new LinearLayout.LayoutParams(lHeight, lWidth));

setContentView(ll);

これによりTextViewScrollView上と下が表示されます。

編集:

もう 1 つのことは、LayoutParams()(幅、高さ) の順に引数を取ります。逆の順序で引数を指定しています。

于 2013-08-03T21:01:31.887 に答える