RecyclerView
要素の場合、予期しない動作が多少発生しています(ItemDecoration
)。ProguardとRecyclerViewアイテムの装飾
一部の電話機(Samsung Android 5デバイス)では、proguardがビルドに適用されたときにItemDecorationが表示されません(trueを縮小します)。 proguard/minifyがうまくいけば、リサイクラの要素間のItemDecorationを見ることができます。
ほとんどの電話では、この問題は存在しません。プロガードの有無にかかわらずアイテムの装飾が表示されます。
何が起こっているのかわかりませんが、入力がわかります。
項目デコレータコード:
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のルール:
-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ログを構築:
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
スーパー奇妙な溶液
for
ループ内Log.i(TAG, "decorating: " + i);
を追加、実際には各項目の線を引くことができます。 forループの外側に置くことはできません。一体どんなアイデアがそこに起こっているの?
最も重要な入力は、ここで受け取ることができます。欠けていることの手掛かりをlogcatの出力で確認してください(そしてproguardの設定を変更してそのまま残してください)。 – mah
@mahここにsamsung S5のlogcatのペーストビンがあります。関連するかもしれないものは何も見ません。どうぞご覧ください。 http://pastebin.com/wb9CaS79(アプリケーションのパッケージ名はcom.company.myAppName) – aviran
あなたは 'RecyclerView'ライブラリのバージョンを使用していますか?あなたの 'Proguard'設定は何ですか? 'minify'が有効になっているときにビルドログをチェックしましたか?ありがとう。 – fasteque