Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

276
Visualizações
¿Cómo puedo configurar las posiciones de los botones desde la pantalla de preferencias?

¡Hola, usuarios de StackOverflow!

Estoy tratando de hacer algo complicado (para un novato como yo XD) y tengo algunas dudas.

¿Cómo puedo configurar la posición de los botones de mi pantalla principal desde una pantalla de preferencias? Como, si tengo 2 botones para invertir su posición...

Traté de hacerlo con el siguiente código en kotlin (por favor, no me juzguen, ya les dije que soy un novato), pero quiero tener una idea de cómo hacer que esto funcione. XDD

 findPreference<Preference>("buttonpositions")!!.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference: Preference, _: Any? -> val checked = (preference as CheckBoxPreference).isChecked if(!checked) { val myBtn = R.id.cleanBtn as Button myBtn.setPadding(0, 100, 0, 0) } true }

y los botones es algo como esto:

 <com.google.android.material.button.MaterialButton style="@style/Widget.Material3.Button.UnelevatedButton" android:id="@+id/cleanBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_columnWeight="1" android:minWidth="0dp" app:layout_rowWeight="1" android:tooltipText="@string/tooltip_clean_button" app:iconGravity="top" app:icon="@drawable/ic_broom" app:iconTint="@android:color/system_accent1_400" android:textColor="@android:color/system_accent1_400" android:text="@string/clean"/> <com.google.android.material.button.MaterialButton style="@style/Widget.Material3.Button.UnelevatedButton" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_columnWeight="1" app:layout_rowWeight="1" android:id="@+id/analyzeBtn" app:iconGravity="top" app:icon="@drawable/ic_search" android:tooltipText="@string/analyze_tooltip" app:iconTint="@android:color/system_accent1_700" android:textColor="@android:color/system_accent1_700" android:text="@string/analyze" android:minWidth="0dp" app:backgroundTint="@android:color/transparent"/>

Primero. Estoy bastante seguro de que mi "código" no está bien compuesto + idk si necesito agregar algo a los botones.

Gracias por tu tiempo :D

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Por qué su código no funcionará:

  • R.id.cleanBtn es un ID de Int, no un botón. Intentar lanzar un Int en un botón bloqueará la aplicación. (La transmisión no es lo mismo que la conversión; le promete al compilador que algo ya es otra cosa). Los ID se usan para buscar jerarquías de vista existentes para la vista real que desea usando algo como rootView.findViewById<Button>(R.id.cleanBtn) , pero esta estrategia no es práctica aquí ya que no tiene acceso directo a la jerarquía de vistas.
  • Intentar cambiar el botón del oyente de preferencia solo funcionaría cuando lo cambie. Si el usuario gira la pantalla o sale de la aplicación y vuelve, la vista de la pantalla principal se volverá a crear en la posición original.

La forma correcta de hacer esto no es en la pantalla de configuración, sino en la pantalla principal. Las preferencias que se configuran en una pantalla de preferencias de forma predeterminada se guardan en las preferencias compartidas "predeterminadas" y se guardan de forma persistente, por lo que se pueden leer desde cualquier otro lugar de su aplicación.

Yo lo que haría sería leer el valor actual de la preferencia en la función onResume() de la actividad o fragmento de tu pantalla principal. Se llamará a onResume() cada vez que vuelva a aparecer esa pantalla, por lo que le da la oportunidad de verificar y aplicar la configuración la primera vez que aparece la vista y cada vez que regresa de la pantalla de preferencias, donde el valor puede haber cambiado.

 //in main screen class private var isButtonPositionFlipped = false // Only need this function if in a Fragment // Need to reset the property in case Fragment has recreated its view override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //... isButtonPositionFlipped = false } override fun onResume() { super.onResume() val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) // use requireContext() instead of this if we're in a Fragment class val shouldFlipButtonPosition = sharedPreferences.getBoolean("buttonpositions", false) if (isButtonPositionFlipped != shouldFlipButtonPosition) { isButtonPositionFlipped = shouldFlipButtonPosition val cleanBtn = findViewById<Button>(R.id.cleanBtn) val analyzeBtn = findViewById<Button>(R.id.analyzeBtn) // use requireView().findViewByID if in a Fragment class if (isButtonPositionFlipped) { // swap the buttons here } else { // swap them back here } } }

En cuanto a cómo intercambiarlos, eso depende del tipo de diseño en el que se encuentren. Si están en un ConstraintLayout, creo que será bastante complicado, pero no lo he probado antes. Puede intentar poner cada uno de los dos botones dentro de FrameLayouts. Luego, podría obtener las vistas de FrameLayout e intercambiar las vistas secundarias entre ellas.

Editar: en realidad, creo que sería más fácil en este caso simplemente hacer que sus botones tengan un nombre más genérico. En lugar de intercambiarlos, simplemente cambie su texto y haga clic en los oyentes a los opuestos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda