2012-04-10 2 views
1

Das Attribut layout_weight in der letzten Textansicht in diesem Layout wird von Lint als schlechte Leistung hervorgehoben. Ich vermute, dass der Name der Fusselwarnung falsch ist, da es keine verschachtelten Gewichte gibt. Es gibt mehrere Dehnungsansichten, und ich vermute, was es bedeutet, sind abhängige gewichtete Ansichten.Warum zeigt Android Lint "verschachtelte Gewichte sind schlecht für die Leistung", wenn keine verschachtelt sind?

Was ist die Lösung, um dieses Layout zu erstellen und diese Flusenwarnung zu vermeiden und die Leistung zu verbessern?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_horizontal" 
      android:background="@drawable/background_gradient" 
    > 
<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/image4" 
     android:layout_margin="6dp" 
     android:contentDescription="@string/PLACEHOLDER_TEXT" 
     /> 
<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     > 
    <Button 
      style="@style/dashboard_button" 
      android:id="@+id/home_management" 
      android:text="@string/ICON_MANAGEMENT" 
      /> 
    <Button 
      style="@style/dashboard_button" 
      android:id="@+id/home_calculators" 
      android:text="@string/ICON_CALCULATORS" 
      /> 
</LinearLayout> 
<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     > 
    <Button 
      style="@style/dashboard_button" 
      android:id="@+id/home_guidelines" 
      android:text="@string/ICON_GUIDELINES" 
      /> 
    <Button 
      style="@style/dashboard_button" 
      android:id="@+id/home_faq" 
      android:text="@string/ICON_FAQ" 
      /> 
</LinearLayout> 
<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     > 
    <Button 
      style="@style/dashboard_button" 
      android:id="@+id/home_refs" 
      android:text="@string/ICON_REFERENCES" 
      /> 
    <Button 
      style="@style/dashboard_button" 
      android:text="" 
      android:visibility="invisible" 
      /> 
</LinearLayout> 
<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:gravity="center_vertical" 
     android:layout_margin="6dp" 
     > 
    <TextView 
      android:text="@string/HOMEPAGE_CONTENT" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_horizontal" 
      android:textStyle="bold" 
      android:textColor="#FFFFFF" 
      /> 
    <View 
      android:layout_width="8dp" 
      android:layout_height="1dp" 
      /> 
    <ImageView 
      android:id="@+id/home_logo" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:src="@drawable/image7" 
      android:contentDescription="@string/PLACEHOLDER_TEXT" 
      /> 
</LinearLayout> 
<Button 
     android:id="@+id/home_web_site" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/HOMEPAGE_FOOTER" 
     android:paddingLeft="4dp" 
     android:paddingRight="4dp" 
     android:paddingTop="8dp" 
     android:paddingBottom="8dp" 
     android:textSize="12sp" 
     android:background="@drawable/button_red" 
     android:layout_margin="6dp" 
     android:textColor="#FFFFFF" 
     /> 
</LinearLayout> 
+0

Siehe auch: http://stackoverflow.com/questions/9430764/why-are-nested-weights-bad-for-performance-alternatives –

Antwort

1

Die TextView und ImageView in Ihrem @string/HOMEPAGE_CONTENT Bereich sind in ihrer Mutter verschachtelt LinearLayout und haben zugewiesen Gewichte. Ich vermute, dass dies dein Problem ist, besonders da das Elternteil wrap_content ist, also sollte theoretisch kein Platz für die Kindelemente sein, in den man sich hineinziehen kann.

+0

Aber sind nicht alle alle gewichteten Ansichten in etwas verschachtelt? Ich habe die Warnung gelesen, dass eine gewichtete Ansicht in einer anderen gewichteten Ansicht schlecht ist, aber in meinem Szenario sind keine gewichteten Ansichten ineinander verschachtelt. Es gibt vier von ihnen, und einige werden von anderen abhängen. Ich bin immer noch geneigt zu denken, der Warntext sei falsch und sollte "abhängig" sagen, nicht "verschachtelt". –

+0

@OllieC Ja, gewichtete Ansichten sind immer innerhalb von etwas, aber es ist nicht immer _useful_. Wenn die übergeordnete Ansicht 1000 Pixel groß ist, aber die untergeordneten Elemente nur 800 Pixel aufnehmen, bestimmen die Gewichtungen, wie der zusätzliche Speicherplatz zugewiesen wird. Ich vermute, die Warnung hier ist, dass die Elternansicht genau den von ihren Kindern definierten Platz einnehmen soll ('wrap_content') und somit die Gewichte nicht nur nutzlos sind, sondern auch unnötige teure' View'-Messungen während des Layouts auslösen können. Ich bin weit entfernt von einem Experten, aber es erscheint mir logisch. – Argyle

+0

Sie können nur selten wissen, wie viele Pixel verfügbar sind. Dies scheint nicht einer dieser Zeiten zu sein. – AlbeyAmakiir

2

Sie müssen sich jedoch keine Sorgen machen, vor allem, wenn Sie wirklich die Gewichte benötigen, und wenn dies die einzige Möglichkeit ist, Ihr Layout korrekt zu deklarieren.

+0

Wenn wir Warnungen im Build-Prozess zulassen, ist es schwer zu wissen, welche Warnungen "ok" sind und welche nicht. Ich bevorzuge einen Null-Toleranz-Ansatz (entweder indem ich die Warnungen fixiere oder sie ausschalte), dann bedeutet eine Warnung, dass sie behoben werden muss. –

0

In Bezug auf diesen Teil des Codes.

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:orientation="horizontal" 

<Button 
     style="@style/dashboard_button" 
     android:id="@+id/home_management" 
     android:text="@string/ICON_MANAGEMENT" 
     /> 
<Button 
     style="@style/dashboard_button" 
     android:id="@+id/home_calculators" 
     android:text="@string/ICON_CALCULATORS" 
     /> 

Ihre Linearlayout enthält „layout_weight“ -Attribut, und wenn der Stil „dashboard_button“ enthält das Attribut „layout_weight“ zu, dann haben Sie einige verschachtelte Ansichten mit der „layout_weight“ Attribut, obwohl der Lint mich nicht jetzt bezüglich "layout_weight" innerhalb der Stile warnt. Meine Lösung besteht darin, eine (oder beide) der LinearLayouts durch RelativLayout zu ersetzen und die Größen und Stellen programmgesteuert anzupassen.

Verwandte Themen