Tratando de cambiar la actividad principal de color de fondo haga clic en el botón

Aquí mi principal:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_menu);

    Button btn = (Button) findViewById(R.id.newgame_button);

    btn.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) {
            changeBackground(v);
        }
    }); 
}

He probado los métodos de seguimiento, tanto de los que han fracasado:

public void changeBackground(View v) 
{
      View someView = findViewById(R.id.main);
      View root = someView.getRootView();
      root.setBackgroundColor(getResources().getColor(R.color.red));
}

public void changeBackground(View v) 
{
      View root = v.getRootView();
      root.setBackgroundColor(getResources().getColor(R.color.red));
}

He buscado y encontrado la solución para resolver este en Cómo establecer el color de fondo de la Actividad blanco mediante programación?; la solución fue publicado:

  //Now get a handle to any View contained 
  //within the main layout you are using
  View someView = findViewById(R.id.randomViewInMainLayout);

  //Find the root view
  View root = someView.getRootView()

  //Set the color
  root.setBackgroundColor(android.R.color.red);

Cuando intento android.R.color.red, eclipse me dice que debe ser en la forma en mis ejemplos.

Me las arreglé para cambiar el fondo de mi botón con:

public void changeBackground(View v) 
{
    v.setBackgroundColor(getResources().getColor(R.color.red));
}

Así, estoy bastante seguro de que el problema no es con: getResources().getColor(R.color.red). He tratado de muchas maneras diferentes, y no estoy llegando a ningún lado. Para referencia, aquí está mi xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="@color/LightCyan"
    android:id="@+id/main">

   <TextView
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:text="@string/welcome"
        android:gravity="center"
        android:layout_weight="3" />

   <LinearLayout
        android:layout_width="200dp"
        android:layout_height="0dip"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:layout_weight="2" > 

       <Button
           android:id="@+id/resume_button"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:text="@string/resume" 
           android:background="@color/Plum"/>

       <Button
           android:id="@+id/newgame_button"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:text="@string/new_game"
           android:background="@color/Plum" 
           android:onClick="changeBackground"/>

    </LinearLayout>

</LinearLayout> 

Cualquier ayuda se agradece. Gracias de antemano.

  • Usted puede probar this respuesta.
InformationsquelleAutor Steve P. | 2013-06-10

4 Kommentare

  1. 2
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_menu);
    
        Button btn = (Button) findViewById(R.id.newgame_button);
    
        btn.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) {
                changeBackground(v);
            }
        }); 
    }

    Cambiar este

       Activity activity;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_menu);
        actvity = this;
        Button btn = (Button) findViewById(R.id.newgame_button);
    
        btn.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) {
    
               actvity.findViewById(android.R.id.content).setBackgroundColor(Color.BLACK);
            }
        }); 
    }
    • Se agarra el actual View de android.R.id.content porque usted dijo activity = this? Así, android.R.id.content es una variable especial?
    • Como que no. Se utiliza para obtener la actividad del contenido. consulte aquí. Aquí this se refiere a la actividad actual solamente.
  2. 0

    En mi aplicación puedo utilizar el código siguiente para cambiar el fondo:

    View view = this.getWindow().getDecorView();
    view.setBackgroundColor(Color.BLACK);

    Probarlo, tal vez va a trabajar para usted.

    • Nope. Gracias, aunque.
    • Si esto no funciona, probablemente tiene algo superponer la Actividad de fondo. El código que he publicado cambia el fondo de la raíz, lo que significa que si usted tiene cualquier Diseño en su actividad este cambio no será visible, porque de la vista de jerarquía.
    • He publicado todos los de mi código de arriba. No hay nada relevante que faltan.
    • Entonces estoy muy curioso por qué mi código no está trabajando para usted… Extraño
    • Soy relativamente nuevo en android, así que no tengo idea. Lo que yo hice en mi respuesta terminó trabajando, aunque.
  3. 0

    Descubierto:

    public void changeBackground(View v) 
    {
          View root = findViewById(R.id.main);
          root.setBackgroundColor(getResources().getColor(R.color.red));
    }

    Al parecer, el uso de getRootView() no es bueno cuando estás lidiando con su principal View. No sé, pero esto funcionó.

  4. 0

    @Steve P.

    Cambiar esta

      public void changeBackground(View v)  {
        v.setBackgroundColor(getResources().getColor(R.color.red)); }

    con este

     public void ChangeBackground(View v)
    {
        View parentsView = (View) v.getParent();
        parentsView.setBackgroundColor(Color.RED);
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea