Sonntag, April 5, 2020

Android – Ändern Sie die Hintergrundfarbe von Marge

Habe ich ein fragment namens HostFragment die Nester ein, um vier weitere Fragmente.

Dies ist das layout der HostFragment:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/hostFragmentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="12dp">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <RelativeLayout
            android:id="@+id/fragmentContainer1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        <RelativeLayout
            android:id="@+id/fragmentContainer2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <RelativeLayout
            android:id="@+id/fragmentContainer3"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        <RelativeLayout
            android:id="@+id/fragmentContainer4"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

    </TableRow>

</TableLayout>

Der wichtige Teil dabei ist android:layout_marginTop="12dp".

Hintergrund: Der verschachtelten Fragmente decken die Gesamtheit der HostFragment Ausnahme von dieser Marge. Wenn der verschachtelten Fragmente ändern Ihre Hintergrundfarbe (durch Aufruf Canvas#drawColor), HostFragment muss auch die Farbe von dieser Marge zu entsprechen. Ich Speicher die benötigte Farbe in SharedPreferences.

Verhalten:, Wenn der Benutzer geht von HostFragment zu SettingsActivity ändert sich die Farbe, und kommt zurück, um HostFragment die verschachtelten Fragmente ändern Ihre Farbe sofort (durch Ihre onResume() Methoden), aber HostFragment’s margin wird immer noch die alte Farbe. Wenn der Benutzer dann die Blätter HostFragment und geht zu einem anderen fragment, dann kehrt HostFragment die Marge für die Aktualisierung seiner Farbe. Ich weiß nicht, wie oder warum – ich habe keine code in HostFragment update der Farbe. Der code in HostFragment sich nur im ein-und Auslagerung und verschachtelten Fragmenten.

Problem: ich brauche die umrissfarbe zu aktualisieren rechts Weg, so in onResume() ich habe versucht, so etwas wie mTableLayout.setBackgroundColor(...) oder sogar mView.setBackgroundColor(...) (mView ist das layout, das ich Blasen im onCreateView()). Dies immer noch nicht funktioniert, und die Farbe wird nur aktualisiert, wenn der Benutzer verlässt und wieder kommt.

Frage: Wie kann ich die Farbe ändern von der Marge, um die übereinstimmung mit einer int Wert in SharedPreferences einmal kehrt der Benutzer zu HostFragment aus einem anderen Activity (d.h. Recht, nachdem der Benutzer wieder aus den Einstellungen)?

Vielen Dank im Voraus!

  • Versuchen Sie geben paddingTop statt marginTop und ändern Sie dann die Farbe der anzeigen in onResume durch mView.setBackgroundColor(...)
  • Fügen Sie Ihren Kommentar als eine Antwort.
  • Getan. Fügte er als Antwort.
InformationsquelleAutor pez | 2015-09-17

5 Kommentare

  1. 5

    Versuchen Sie geben paddingTop statt marginTop und ändern Sie dann die Farbe der anzeigen in onResume durch mView.setBackgroundColor(...).

    • Marge ist der Raum außerhalb der Ansicht, damit die Hintergrundfarbe der anzeigen zeigen nicht die im margin-Raum.
    • Polsterung ist der Raum, innerhalb einer Sicht-und Hintergrundfarbe auf eine Ansicht angewendet werden, – Polsterung Platz.
  2. 1

    Einstellung der Farbe der Spanne ist nicht möglich. Um etwas zu erreichen, wie das aussieht, obwohl, es gibt zwei Dinge zu tun.

    1) mit padding statt margin.
    Marge ist außerhalb eines Elements, während die Polsterung im inneren des Elements. Dies bedeutet, dass das element wird in der Größe wachsen, und dass die Farbe, die Sie gegeben haben Ihr element als hintergrund-Farbe auch für den Bereich um die Inhalte.

    2) Verwenden Sie eine Grenze, oder drawable.
    Diese Methode erfordert mehr Arbeit, aber ist sehr stark konfigurierbar. Erstellen einer Grenze geschieht einfach durch Einstellung einer drawable als hintergrund, und geben Sie eine Linienstärke und Farbe. Weitere Informationen (und eine Beispiel-Implementierung) siehe https://stackoverflow.com/a/8203840/4330555.

    Weitere Informationen auf margin, padding, border usw.. sehen http://www.w3schools.com/css/css_boxmodel.asp. Diese website erklärt es für CSS, aber das Konzept ist das gleiche so ziemlich überall.

  3. 0

    In Ordnung, die Farbe zu ändern .setBackgroundColor(...) sollte in onResume(), aber Sie sollten sich bewusst sein, dass, wie es wurde oben dargelegt, einen margin-Bereich ist der Raum, der Links außerhalb aus Ihrer Sicht in dem Verweis der übergeordneten Ansicht. Das ist, warum ändern Sie einen Blick auf die Hintergrundfarbe würde keine Auswirkungen auf die Marge. Was Sie tun können, ist, eine FrameLayoutumschließt, die Ihre TableLayout so, dass Ihr TableLayout hat eine Referenz, um den Rand aus. In diesem Fall sollten Sie in der Lage sein zu ändern FrameLayout’s hintergrund und es sollte Einfluss auf die gewünschte Randbereich.

    Im Bild unten das rote Rechteck stellt Ihre TableLayout wie Sie sehen können auf der linken Seite ist der root-Ansicht Ihrer HostFragment – und Randbereich ist außerhalb Ihrer Reichweite.Auf der rechten Seite, der root-Ansicht Ihrer HostFragment ist ein FrameLayout und das rote Rechteck ist immer noch Ihr TableLayout. Im letzteren Fall, können Sie ändern die Farbe der FrameLayout.

    Bild : http://oi59.tinypic.com/jz8q46.jpg

  4. 0

    versuchen, diese,

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/c1_cnxlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/black" >
    
        <RelativeLayout 
            android:id="@+id/c2_cnxlayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:background="@android:color/darker_gray" />
    
    </RelativeLayout>
  5. 0

    beste Weg ist, um eine hintergrund-Ressource die Angabe von mehreren Formen mit verschiedenen Farben, und verwenden Sie margin oder padding..

Kostenlose Online-Tests