studio programacion herramientas fundamentos con avanzado aplicaciones android android-textview

programacion - manual de android en pdf



Android consigue el ancho de vista creado programáticamente (5)

He creado TextView programáticamente, así:

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();

Pero mTextView.getWidth () siempre devuelve 0

Y si lo intento:

mTextView.getLayoutParams().width

Devuelve el valor correspondiente de LayoutParams en la clase LayoutParams (-1 o -2)

¿Cómo puedo obtener el ancho de la vista?

EDITAR Necesito hacer esto aquí:

@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); }

SOLUCIÓN DE EDICIÓN Utilicé esto de la respuesta de @ androiduser:

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

Problema resuelto !


Debe usar la clase ViewTreeObserver que se usa para registrar escuchas que pueden ser notificadas de cambios globales en el árbol de vista. Dichos eventos globales incluyen, pero no se limitan a, el diseño de todo el árbol, el comienzo del paso de dibujo, el cambio del modo táctil.

En la actividad onCreate mehotd pon esto:

ViewTreeObserver vto = mTextView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mTextView.getViewTreeObserver().removeGlobalOnLayoutListener(this); int viewWidth = mTextView.getMeasuredWidth(); } });


En este método puedes obtener el ancho alto de la vista.

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

y definir TextView mTextView como global


Utilicé esta solución:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // Ensure you call it only once yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this); // Here you can get the size :) } });


esos valores son valores constantes para FILL_PARENT y WRAP_CONTENT. Si desea verificar el tamaño de la vista, puede intentarlo de esta manera:

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

tienes que esperar hasta que Android dibuje el TextView . De esta manera, está publicando un Runnable en la cola de mapa de etiquetas, que se ejecuta, con suerte después de que la vista de texto sea un dibujo (por lo tanto, debe ser peso y altura)


obtener de esta manera:

tV.post(new Runnable() { @Override public void run() { int width=tV.getMeasuredWidth(); } });