Ich habe etwas unerwartetes Verhalten mit für RecyclerView
Elemente.Proguard und RecyclerView Artikel Dekoration
Auf einigen Handys (Samsung Android 5 Geräte) wird meine ItemDecoration nicht angezeigt, wenn proguard mit dem Build angewendet wird (minify true). Ohne progard/minify funktioniert es gut, Sie können die ItemDecoration zwischen den Elementen des Recyclers sehen.
Auf den meisten Telefonen existiert das Problem nicht, Sie können die Objektdekoration mit oder ohne Programm sehen.
Nicht sicher, was dort passiert, aber jede Eingabe wird geschätzt.
Der Artikel Dekorateur Code:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public DividerItemDecoration(Context context) {
mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);
}
@Override
public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int top = child.getBottom() + params.bottomMargin;
int bottom = top + mDivider.getIntrinsicHeight();
int margin = 30;
mDivider.setBounds(left + margin, top, right - margin, bottom);
mDivider.draw(canvas);
}
}
}
line_divider.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="1dp"
android:height="1dp" />
<solid android:color="#ffc6c6c6" />
</shape>
Proguard Regeln:
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
# support design library
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
#retrofit
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keep class com.myappspackage.catalog.** { *; }
#OKHttp
-dontwarn okio.**
-keep class okio.** { *; }
-dontwarn org.slf4j.**
-keep class org.slf4j.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
-keepattributes Signature
-keepattributes Exceptions
#Google analytics
-keep class com.google.android.gms.** { *; }
-keep public class com.google.android.gms.**
-dontwarn com.google.android.gms.**
Gradle bauen log:
Executing tasks: [clean, :app:generateReleaseSources]
Configuration on demand is an incubating feature.
:app:clean
:app:preBuild UP-TO-DATE
:app:preReleaseBuild UP-TO-DATE
:app:checkReleaseManifest
:app:preDebugBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72311Library
:app:prepareComAndroidSupportCardviewV72311Library
:app:prepareComAndroidSupportDesign2311Library
:app:prepareComAndroidSupportRecyclerviewV72311Library
:app:prepareComAndroidSupportSupportV42311Library
:app:prepareComCrashlyticsSdkAndroidAnswers131Library
:app:prepareComCrashlyticsSdkAndroidBeta113Library
:app:prepareComCrashlyticsSdkAndroidCrashlytics251Library
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore234Library
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library
:app:prepareDeHdodenhofCircleimageview130Library
:app:prepareIoFabricSdkAndroidFabric135Library
:app:prepareReleaseDependencies
:app:compileReleaseAidl
:app:compileReleaseRenderscript
:app:generateReleaseBuildConfig
:app:generateReleaseAssets UP-TO-DATE
:app:mergeReleaseAssets
:app:processReleaseManifest
:app:fabricGenerateResourcesRelease
:app:generateReleaseResValues UP-TO-DATE
:app:generateReleaseResources
:app:mergeReleaseResources
AAPT: /Users/aviran/Projects/app/src/main/res/drawable-xhdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /Users/aviran/Projects/app/src/main/res/drawable-hdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /Users/aviran/Projects/app/src/main/res/drawable-mdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
:app:processReleaseResources
:app:generateReleaseSources
BUILD SUCCESSFUL
Total time: 30.549 secs
Super-seltsame Lösung
Hinzufügen Log.i(TAG, "decorating: " + i);
innerhalb der for
Schleife macht es tatsächlich die Linien für jede Position ziehen. Putting es außerhalb der for-Schleife funktioniert nicht. Irgendeine Idee, was zum Teufel ist dort los?
Die wichtigste Eingabe, die Sie möglicherweise hier erhalten können: Überprüfen Sie Ihre Logcat-Ausgabe für einen Hinweis auf was fehlt (und ändern Sie dann Ihre Proguard-Konfiguration, um sicherzustellen, dass es intakt bleibt). – mah
@mah hier ist ein Pastebin der Logcat auf Samsung S5, sehe ich nichts, das verwandt sein könnte, können Sie einen Blick darauf werfen? http://pastebin.com/wb9CaS79 (Der Paketname der App lautet com.company.myAppName) – aviran
Welche 'RecyclerView'-Bibliotheksversion verwenden Sie? Was ist deine 'Proguard'-Konfiguration? Haben Sie das Buildprotokoll überprüft, wenn "minify" aktiviert ist? Vielen Dank. – fasteque