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 
  • Recurso del paisaje de Nexus 9
  • Reemplazar (o "Anular") cadena en el proyecto de la biblioteca de Android
  • Mejor manera de programar botones / imágenes
  • Cómo escribir estilo de texto de error de EditText en android?
  • Averiguar qué disposición tiene un error
  • Los niños de CoordinatorLayout no son de pantalla completa
  • Manejo de barras de acción con dos fragmentos
  • Haga que el tamaño del botón de imagen siempre sea un cuadrado. Androide
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.