gancho LayoutInflater y cambiar los valores al inflar las vistas

Quiero implementar un LayoutInflater personalizado que escala valores de dimensión, por ejemplo, use:

int scale = 2; MyInflater.inflate(R.id.testview, null, parent, scale); 

inflar un xml con todos los valores de dimensión duplicados.

es decir, un xml como este:

 <View android:layout_width="10dp" android:layout_height="10dp" /> 

se inflarán a una vista que el ancho y la altura son 20dp.

LayoutInflater.Factory no puede resolver mi problema.

¿Hay alguna manera de lograrlo?

One Solution collect form web for “gancho LayoutInflater y cambiar los valores al inflar las vistas”

Tal vez usted podría utilizar este código para hacer un lazo a todos los niños de su diseño inflado y multiplicar el ancho y la altura mediante la configuración de LayoutParams:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); MyInflater inflater = new MyInflater(LayoutInflater.from(this), this); ViewGroup viewGroup = (ViewGroup) findViewById(R.id.my_layout); inflater.inflate(R.layout.test_view, viewGroup, true, 2); } private class MyInflater extends LayoutInflater { private int mScale; protected MyInflater(LayoutInflater original, Context newContext) { super(original, newContext); } @Override public LayoutInflater cloneInContext(Context newContext) { return null; } public View inflate(int resource, ViewGroup root, boolean attachToRoot, int scale) { mScale = scale; // This will return the parent of the inflated resource (if it has one) View viewRoot = super.inflate(resource, root, attachToRoot); if (viewRoot instanceof ViewGroup) { loopViewGroup((ViewGroup) viewRoot, viewRoot == root); } else { doubleDimensions(viewRoot); } return viewRoot; } private void doubleDimensions(View view) { ViewGroup.LayoutParams params = view.getLayoutParams(); Log.d(TAG, "Before => "+params.width+" : "+params.height); params.width = params.width * mScale; params.height = params.height * mScale; Log.d(TAG, "After => "+params.width+" : "+params.height); view.setLayoutParams(params); } private void loopViewGroup(ViewGroup group, boolean isRoot) { // If viewRoot == root, skip setting ViewGroup params if (!isRoot) doubleDimensions(group); // Loop the ViewGroup children for (int i=0; i<group.getChildCount(); i++) { View child = group.getChildAt(i); // If a child is another ViewGroup, loop it too if (child instanceof ViewGroup) { loopViewGroup((ViewGroup) child, false); } else { doubleDimensions(child); } } } } 
  • ¿Cuál es la diferencia entre los infladores
  • Línea del archivo XML binario ocasional #XX: Error al inflar la clase <unknown>
  • Cómo guardar un diseño hinchado en android después de los cambios de configuración?
  • Android: setContentView () == getViewInflate (). Inflate ()?
  • Cómo agregar una vista inflada a un diseño lineal
  • ¿Arquitectura de complementos para una aplicación de Android?
  • Problema de LayoutInflater de Android
  • ¿Cuál es la forma correcta de obtener el inflador de diseño en Android?
  • Inflater en Android Fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.