Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


RelativeLayout ¿La gravedad no se aplica?

Tengo una actividad con el siguiente diseño:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/testlayoutOverlays" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/testlayoutMain" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RelativeLayout android:id="@+id/testlayout_bottom" android:layout_width="fill_parent" android:layout_height="62dp" android:background="#122334" > <ImageView android:id="@+id/testbtnBlock" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignParentLeft="true" android:layout_gravity="left|center_vertical" android:contentDescription="Test1" android:padding="@dimen/padding_medium" android:src="@drawable/btnblock" /> <TextView android:id="@+id/testtxtZoomPan" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/testbtnX" android:layout_toRightOf="@+id/testbtnBlock" android:gravity="center_horizontal" android:text="@string/txtZoomPan" android:textColor="#FFFFFF" /> <ImageView android:id="@+id/testbtnX" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignParentRight="true" android:layout_gravity="right|center_vertical" android:contentDescription="Test2" android:padding="@dimen/padding_medium" android:src="@drawable/btnx" /> </RelativeLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/testlayoutPuzzleInfo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:orientation="horizontal" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/testlayoutChronoErrors" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <Chronometer android:id="@+id/testchronometer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:format="@string/chronometer_initial_format" android:gravity="center" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/testlayoutErrors" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:layout_width="1px" android:layout_height="20dp" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> 

Y el siguiente código:

  • Cordova / Phonegap / Ionic App - tienda local de imágenes remotas
  • Método para anular cuando el diseño se destruye en Android
  • Android cómo crear mi propia actividad y ampliarla?
  • ¿Cómo hace setOffscreenPageLimit () mejorar el rendimiento de ViewPager reteniendo más fragmentos fuera de pantalla?
  • Botón Atrás cerrar la aplicación incluso cuando se utiliza FragmentTransaction.addToBackStack ()
  • Android: cómo aumentar el tamaño de montón en tiempo de ejecución?
  •  package minmaxdev.android.picrossanywhere; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.support.v4.app.NavUtils; public class TestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); // Capture our button from layout ImageView button = (ImageView) findViewById(R.id.testbtnBlock); // Register the onClick listener with the implementation above button.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { RelativeLayout rv = (RelativeLayout) findViewById(R.id.testlayoutOverlays); rv.setGravity(Gravity.CENTER); Button btnRetry = new Button(TestActivity.this); btnRetry.setId(R.id.btnRetry); btnRetry.setBackgroundResource(R.drawable.btnselector); RelativeLayout.LayoutParams prmBtn = new RelativeLayout.LayoutParams(Util.DPsToPixels(200, getResources()), Util.DPsToPixels(40, getResources())); prmBtn.setMargins(0, 120, 0, 0); btnRetry.setLayoutParams(prmBtn); // btnRetry.setGravity(Gravity.CENTER_HORIZONTAL); btnRetry.setText("Retry"); btnRetry.setOnClickListener(new ImageView.OnClickListener() { public void onClick(View v) { Intent intent = getIntent(); finish(); startActivity(intent); } }); rv.addView(btnRetry); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_test, menu); return true; } } 

    Me gustaría saber: ¿Por qué mi botón creado dinámicamente (denominado btnRetry ) no aparece en el centro de la pantalla, ya que establezco la gravedad relativa RelativeLayout de los padres en el centro con rv.setGravity(Gravity.CENTER) ?

    Muchas gracias por tu tiempo

  • Excepción android.content.res.Resources $ NotFoundException: Archivo res / drawable / my.xml del ID de recurso extraíble
  • Convertir la cadena de color android en tiempo de ejecución en int
  • Mostrar un diálogo en `Thread.setDefaultUncaughtExceptionHandler`
  • Reutilizar archivos de expansión en la consola de desarrolladores de Android
  • Aumenta la escala del elemento en RecyclerView para superponer 2 elementos adyacentes.
  • Android - ¿Cómo puedo ver una base de datos SQL creada en mi aplicación? Lo estoy ejecutando en el emulador de Android de Eclipse
  • One Solution collect form web for “RelativeLayout ¿La gravedad no se aplica?”

    La respuesta es fácil. Gravity funciona para el contenido, layout_gravity para la vista que usa eso. Fuente básicamente: https://stackoverflow.com/a/3482757/180538

    Trate de usar LayoutParams con addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);

    Para responder a su comprensión de la gravedad: Usted tiene razón, pero supongo que esta información en la documentación es importante:

    Tenga en cuenta que dado que RelativeLayout considera que el posicionamiento de cada uno de los parientes entre sí es significativo, establecer la gravedad afectará el posicionamiento de todos los niños como una sola unidad dentro del padre. Esto sucede después de que los niños han estado relativamente posicionados.

    No puedo probar su diseño en este momento, pero mi conjetura es que el momento en que se aplica la gravedad no crea el resultado esperado.

    Personalmente usaría la gravedad sólo en LinearLayouts y el centerInParent para RelativeLayouts.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.