3

SystemUI Quick Toggles Background にフックして、選択した色に応じて変更しました。変更可能な色ではなく、最初に静的な色に変更しようとしています。

問題は、このコードを実行すると、機能する場合と機能しない場合があり、ログを確認して、同じことを言っていることです。

電話をロックすると、元の色に戻ります。

あなたができるように、それはビューです。私はSystemUIのdex2jarを持っていて、それをライブラリとしてAPKプロジェクトに追加し、クラスを実装して変更しました。

何が問題なのですか?

import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.InsetDrawable;
import android.util.Log;



import com.android.systemui.qs.QSContainer;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;


public class Test2 {

private static QSContainer mQSContainer;
static final int mSystemUIPrimaryColor = ColorsUtils.primary;

public static void hook()
{
    try
    {
        XposedHelpers.findAndHookMethod(QSContainer.class, "onFinishInflate", new XC_MethodHook()
        {
            @Override
            protected void afterHookedMethod(MethodHookParam HookParm)
                    throws Throwable {
                mQSContainer = (QSContainer) HookParm.thisObject;
                Log.i(Test1.TAG,"First Hook, Test2");
                SetUpBackground();
            }
        });
    }
    catch (Exception e)
    {
        XposedBridge.log(e);
    }
}


public static void SetUpBackground()
{
    Log.i(Test1.TAG, "SetUpBackground, Test2");
    GradientDrawable localGradientDrawable = new GradientDrawable();
    localGradientDrawable.setCornerRadius(2.0F);
    localGradientDrawable.setColor(mSystemUIPrimaryColor);
    Drawable localObject = new InsetDrawable(localGradientDrawable, 0, -2, 0, 0);
    mQSContainer.setBackground(localObject);

    //mQSContainer.setBackgroundColor(mSystemUIPrimaryColor);

}

}
4

2 に答える 2

0

私の推測では、onFinishInflate は 1 回だけ呼び出されるため、その後の再描画では元のものが再描画されます。このクラスの onDraw メソッドをフックして、そこに同じ変更を挿入してみてください。

于 2016-03-31T21:29:39.103 に答える