簡體   English   中英

Xposed - 代碼不更改SystemUI快速按預期切換BG

[英]Xposed - Code Doesn't Change SystemUI Quick Toggles BG as intended

我正在進入SystemUI Quick Toggles Background,並根據所選顏色進行了更改,我試圖先將其更改為靜態顏色,而不是更改顏色。

問題是,在執行此代碼時,有時它可以工作,有時它不起作用,檢查日志,它說的是我輸入的相同。

當我鎖定手機時,它會恢復原始顏色。

你可以,它是一個視圖,我有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);

}

}

我的猜測是onFinishInflate僅被調用一次,因此隨后的重繪,原始將被重繪。 嘗試掛鈎此類的onDraw方法並在那里注入相同的修改。

嘗試並更新主線程中的背景:

// 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM