20

次のように、プログラムで TextView を作成しました。

                TextView mTextView = new TextView(getApplicationContext());

                final LayoutParams params = new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                ((MarginLayoutParams) params).setMargins(8, 8, 0, 0);

                mTextView.setText(mText);
                mTextView.setLayoutParams(params);
                mTextView.setPadding(2, 2, 2, 2);
                mTextView.setBackground(getResources().getDrawable(R.drawable.note_corps));

                tagMap.addView(mTextView);

                textViewsWidth = mTextView.getWidth();

ただし、 mTextView.getWidth() は常に 0 を返します

そして、私が試してみると:

mTextView.getLayoutParams().width

LayoutParams クラスの LayoutParams に対応する値 (-1 または -2) を返します。

ビューの幅を取得するにはどうすればよいですか?

編集ここでこれを行う必要があります:

            @Override
        public void onPostExecute(Hashtable<String, Integer> hash){
            final ScrollView tagMapScroll = (ScrollView) findViewById(R.id.tagMapScroll);
            final LinearLayout tagMap = (LinearLayout) findViewById(R.id.tagMap);
            final ArrayList<Integer> arr = new ArrayList<Integer>(hash.values());
            final Enumeration<String> e = hash.keys();
            int index = 0;
            int textViewsWidth = 0;

            while(e.hasMoreElements()){
                final TextView tV = new TextView(getApplicationContext());

                tV.setTextColor(Color.parseColor("#666666"));
                tV.setText(Html.fromHtml(randomColor() + e.nextElement()));
                tV.setTextSize(arr.get(index));

                final LayoutParams params = new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                ((MarginLayoutParams) params).setMargins(8, 8, 0, 0);

                tV.setLayoutParams(params);
                tV.setPadding(2, 2, 2, 2);
                tV.setBackground(getResources().getDrawable(R.drawable.note_corps));

                tagMap.addView(tV);

                textViewsWidth += tV.getWidth();

                index++;
            }

            tagMapScroll.setVisibility(ScrollView.VISIBLE);

        }

編集ソリューション@androiduser の回答からこれを使用しました。

mTextView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
                int width = mTextView.getMeasuredWidth();
                int height = mTextView.getMeasuredHeight();

問題が解決しました !

4

5 に答える 5

4

このように取得します:

tV.post(new Runnable() {
                    @Override
                    public void run() {
                        int width=tV.getMeasuredWidth();
                    }
                });
于 2013-10-28T11:39:18.613 に答える
2

これらの値は、FILL_PARENT および WRAP_CONTENT の定数値です。ビューのサイズを確認したい場合は、次の方法で試すことができます。

tagMap.addView(mTextView);
tagMap.post(new Runnable() {
                    @Override
                    public void run() {
                        mTextView. getWidth();
                    }
                });

アンドロイドが を描画するまで待つ必要がありますTextView。このようにして、ランナブルを tagMap キューに投稿します。これは実行されます。できれば、テキストビューが描画された後に実行されます (したがって、重量と高さである必要があります)。

于 2013-10-28T11:22:08.463 に答える
1

このメソッドでは、ビューの幅と高さを取得できます..

    @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    int width = mTextView.getWidth();
    int height = mTextView.getHeight();
}

TextView mTextViewグローバルとして定義

于 2013-10-28T11:28:27.450 に答える