4

ユーザーが画面にいくつかのオブジェクトをペイントするAndroidアプリを構築しています。オブジェクトの1つのタイプは、Textオブジェクトです。ユーザーが指をドラッグしてオブジェクトを作成すると、オブジェクトは移動/再形成可能な長方形として表示されます。ユーザーがテキストオブジェクトをタップすると、ユーザーがテキストを入力する新しいアクティビティを起動し、onActivityResultメソッドで返します。

次に、オブジェクトにテキストを表示します。テキストクラスから長方形などの座標としてのものにアクセスできます。本質的に私がやりたいのは、プログラムでTextView(またはEditText)を作成し、その境界をオブジェクトがペイントされている長方形の境界として設定することです。それを行うのに役立つメソッドはありますか?

(別のアプローチは、テキストオブジェクトでcanvas.drawTextOnPathメソッドを使用することです。ただし、テキストがオブジェクトから外れる可能性があり、複数行も処理する必要があるため、これはより複雑に見えます)

事前にどうもありがとうございました!

編集:GAMAのアプローチを試す

protected void onActivityResult(int requestCode, int resultCode, Intent data) {                 
  switch(requestCode) { 
  case 1:
      if (resultCode == Activity.RESULT_OK) { 
            String text=data.getStringExtra("text");
            System.out.println(text);
            TextView tv=new TextView(this);
            //LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams((int)texts.get(index).width,(int)texts.get(index).height));
            LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(100,100));
            //tv.setLayoutParams(lp);
            //lp.setMargins((int)texts.get(index).Sx, (int)texts.get(index).Sy, (int)texts.get(index).Lx, (int)texts.get(index).Ly);

            tv.setLayoutParams(lp);
            tv.setTextSize(10);
            tv.setTextColor(Color.RED);
            tv.setText(text);
            lp.setMargins(0,0,0,0);
            //tv.setVisibility(View.VISIBLE);
            System.out.println("got "+tv.getText());
            }
      break;
      }
  }  

どちらのプリントも期待どおりにテキストを表示しますが、画面に何も表示されません(最初に左下に設定しようとしました)

4

3 に答える 3

10
                    EditText edText = new EditText(this);
            edText .setId(i);
            edText .setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                    1f));

                    edText .setWidth(100);
            edText .setImeOptions(EditorInfo.IME_ACTION_NEXT);
            edText .setInputType(InputType.TYPE_CLASS_NUMBER);
            edText .setKeyListener(DigitsKeyListener.getInstance());
            edText .setMaxLines(1);
                    edText .setOnFocusChangeListener(this);
            edText .setOnEditorActionListener(this);
            edText .addTextChangedListener(this);

                    //this linearlayout id is declared inside your xml file
                        LinearLayout linear=(LinearLayout)findViewById(R.id.linearLayout1);
                        linear.addView(edText );
于 2012-06-05T09:38:11.980 に答える
3

実際、drawTextOnPathあなたの最善の策です。出血しません。あなたがしなければならないのは、長方形の左中央の垂直線から右中央の垂直線までのパスを作成することだけです. このメソッドは、パス内に収まるようにテキストのサイズを変更します。

を使用して、それに応じてパスを調整できますPaint.getTextWidth()。幅がボックスよりも大きい場合はPaint.getTextHeight()、最初の行の下に行を追加してパスを拡張します。

于 2012-06-05T09:32:12.987 に答える
1

これを試して:

TextView tv=new TextView(this);
LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(width,height));
tv.setLayoutParams(lp);
lp.setMargins(0, 0, 0, 0);
于 2012-06-05T09:29:26.470 に答える