2012-05-21 11 views
15

Ich habe zwei Android-Anwendungen mit einer ähnlichen Funktionalität, aber verschiedene Zeichen und Layouts.Wie können in einem Android-Bibliotheksprojekt definierte Zeichen geändert werden?

Ich möchte den gesamten Code und die Ressourcen in ein Bibliotheksprojekt einfügen und einige der Zeichen und Layouts in den beiden Anwendungen überschreiben, die auf diese Bibliothek verweisen.

Ich habe eine Anwendung erstellt, die auf die Bibliothek verweist. Ich habe alle Ressourcen aus der Bibliothek in die Anwendung kopiert und einige der Zeichen geändert. Ich habe auch einige der String-Ressourcen geändert. Wenn ich eines der geänderten Layouts im Layout-Editor in Eclipse anschaue, sehe ich die korrekten überschriebenen Bilder.

Wenn ich die Anwendung starte, sehe ich, dass die Zeichenfolgenressourcen, die ich in der Anwendung änderte, korrekt angezeigt werden (die Bibliothekszeichenfolgen werden von den Ressourcen der Anwendung überschrieben), aber die Zeichen meiner ImageView s werden alle aus den Ressourcen genommen der Bibliothek.

Ich habe auch Änderungen in einigen der Layout-Ressourcen vorgenommen (einige Bilder verschoben und in der Größe geändert). Wenn ich eine Aktivität starte, die das geänderte Layout verwendet (eine Aktivität, deren Quellcode in der Bibliothek enthalten ist), sehe ich das neue (Anwendungs-) Layout mit den alten (Bibliotheks-) Zeichnungsdateien.

Ich versuchte, die Drawables der ImageView s auf zwei Arten definieren:

  1. im Layout xml: android:src="@drawable/image_id"

  2. im Code der Aktivität:

    ImageView view = (ImageView)findViewById(R.id.viewId); 
    view.setImageResource(R.drawable.image_id); 
    

In beiden Fällen wird das Bild, das ich sehe, aus den Ressourcen genommen des Bibliotheksprojekts und nicht der Anwendung.

Wenn ich dieses Problem nicht lösen kann, muss ich den gesamten Code in beiden Anwendungen duplizieren, was eine Schande wäre.

Mache ich etwas falsch?

+0

Ich habe für Ihre Frage abgestimmt, weil es sehr nützlich scheint, vor allem mit Ihrer eigenen Antwort, in Kommentaren zur Verfügung gestellt. Ich denke, das Überschreiben von Zeichen ist ein ebenso wichtiger Ansatz wie das Überschreiben von Methoden und macht die Dinge viel einfacher und rationalisierter. Übermäßige Parameter und Codierung sind überflüssig. – Stan

Antwort

2

Wie ich oben in einem Kommentar schrieb, gelang es mir, mein Problem zu lösen, indem ich die Projekte säuberte und neu erstellte.

+1

Nicht sicher, wofür der Downvote ist. Diese Antwort hat mein Problem gelöst. Sonst würde ich es hier nicht posten. – Eran

+1

Ihre "Lösung" liefert keine Details, was Sie genau machen, während Sie die Projekte "säubern und neu aufbauen". Entfernen Sie einige Ressourcen von Ihren Händen? Führst du die saubere Aufgabe von Gradle aus? – StAlex

+0

@StAlex Es ist lange her, seit ich das gepostet habe, also erinnere ich mich nicht an die Details, aber ich glaube, ich habe die Projekte in meiner Eclipse-IDE geputzt und neu aufgebaut. "sauber" ist eine Operation, die Sie an einem Eclipse-Projekt ausführen können. – Eran

1

Kopieren Sie nicht Dinge, überprüfen Sie Ihr Design, um die ResourceId des Drawable als Parameter für Ihr Objekt zu geben.

4

Basierend auf meiner Erfahrung können Sie die zeichnende Ressource im Bibliothekmodul ersetzen, indem Sie style und refs.xml verwenden.

Zuerst müssen Sie die ziehbar Ressource in einem Stil erklären, wie

<style name="drawable_base_style"> 
    <item name="android:src">@drawable/base</item> 
</style> 

dann in der App (Modul oder ein Projekt, auf dem IDE abhängig), neu definieren einen Stil

<style name="drawable_base_style_app"> 
    <item name="android:src">@drawable/app</item> 
</style> 

und verwenden Sie refs.xml, um auf den neuen Stil zu verweisen.

<item name="drawable_base_style" type="style">@style/drawable_base_style_app</item> 

dann der letzte Schritt: drücken Sie die Daumen.

0

Ich tat das gleiche und hatte kein Problem. Bild überlagert.