3

我正在连接 SystemUI 快速切换背景,并根据所选颜色对其进行更改,我正在尝试先将其更改为静态颜色,而不是可更改的颜色。

问题是,在执行此代码时,有时它可以工作,有时它不会工作,检查日志,它说的是我输入的相同。

当我锁定手机时,它会恢复到原来的颜色。

如您所见,这是一个视图,我有 dex2jar SystemUI,并将其作为库添加到我的 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 只被调用一次,因此在随后的重绘中,原件将被重绘。尝试挂钩该类的 onDraw 方法并在那里注入相同的修改。

于 2016-03-31T21:29:39.103 回答
0

尝试在主线程中更新背景:

// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {
         SetUpBackground();
    } 
};
mainHandler.post(myRunnable);
于 2016-04-03T12:55:22.533 回答