Ver inflación y vistas personalizadas

Tengo una vista personalizada en mi aplicación que dibujo utilizando la función onDraw() en la vista. También necesita algunos datos de la actividad para dibujar el gráfico. Así que en lugar de usar el estándar setContentView(R.layout.myview) estoy usando el siguiente –

 MyView mv = new MyView(this, userData); setContentView(mv); 

Esto parecía funcionar hasta que agregué un textview encima de la vista personalizada. Entonces me di cuenta de que el código anterior no muestra el texto en absoluto. También el onFinishInflate() nunca se llama. ¿Tengo que inflar el diseño yo mismo en este caso? Si es así, ¿también tengo que llamar a la función onDraw() ?

Gracias, – P

2 Solutions collect form web for “Ver inflación y vistas personalizadas”

Lo que debe tener aquí es un diseño que contiene el TextView y su MyView y luego dentro de su actividad, encontrar su vista personalizada y pasar sus datos de usuario. Su MyView puede utilizar esto durante su onDraw() . Tal vez algo como esto:

res/layout/main.xml :

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="veritcal"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello World" /> <my.package.MyView android:id="@+id/myview" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

src/my/package/MyView.java :

 public class MyView extends View { UserData mUserData = null; public void setUserData(userData) { mUserData = userData; } @Override protected void onDraw(Canvas canvas) { performCustomDrawingWithUserData(mUserData); super.onDraw(canvas); } } 

src/my/package/MyActivity.java :

 public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // pass the user data into myview here. MyView myView = (MyView) findViewById(R.id.myview); myView.setUserData(userData); } } 

onFinishInflate ()

Finalice el inflado de una vista desde XML . Esto se llama como la última fase de la inflación, después de que todas las opiniones de los niños se han añadido.

Cuando usted crea su opinión por el código ( new ... ) usted no lo está inflando … por otra parte, si usted lo declara en el XML o usted utiliza algo como getLayoutInflater().inflate(R.layout.your_view,null,null); Entonces usted lo está inflando (y onFinishInflate ) será llamado.

No importa cómo lo esté haciendo, el método onDraw siempre será llamado; Por lo que no tiene que invocarlo manualmente.

Por cierto … siempre es una buena idea mantener su vista personalizada en el XML, incluso si necesita datos. Así que tienes al menos dos opciones:

 setContentView(R.layout.your_layout); YourCustom custom = (YourCustom)findViewById(R.id.custom); custom.setUserData(userData); 

O … puede obtener esos datos desde la vista personalizada (no se recomienda):

 // inside your custom view... UserData userData = Someclass.getUserData(getContext()); // etc... so that you don't have to pass it from the activity 
  • Traducir programaticamente Vista Pre-Honeycomb
  • Translucent Dialog Theme para Holo
  • Alinear el elemento en la esquina de la ronda Dispositivo de desgaste
  • Android: mostrar / ocultar una vista utilizando una animación
  • Crear efecto de fondo transparente borroso
  • Android: ¿Acabo de tener un disparo por propiedad mediante el uso de temas? ¿No hay nada como CSS en Android?
  • Android - ¿Cómo establecer el estilo de botón de forma programática en un Linearlayout?
  • Aliasing de un recurso de diseño con el mismo nombre sólo calificador de pantalla diferente
  • Añadir sombra a la forma personalizada en Android
  • Pestañas con los iconos que utilizan ViewPager, ¿cómo ponerlos? Adjuntando un archivo de diseño
  • Barra de acciones Tabulaciones CustomView demasiado largo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.