您的位置:首页 > 其它

修改第三方应用的界面显示(例如:QQ)

2017-05-17 15:13 337 查看
首先要自己写一个工具类放在系统frameworks/base/core/java/android/util/目录下,在工具类里面处理界面显示效果。现在是简单的处理界面里按钮的显示位置:

现在上代码:

package android.util;

import android.app.Activity;
import android.content.res.Resources;
import android.text.TextUtils.TruncateAt;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
* ClassName:SpecialUtils
* @hide
*
*/
public class SpecialUtils {

private static final String PACKAGENAME_MM = "com.tencent.mm";
private static final String PACKAGENAME_QQ = "com.tencent.mobileqq";
private static final String PACKAGENAME_QQLITE = "com.tencent.qqlite";
private static final int PACKAGENAME_MM_FLAG_LAUNCHERUI = 10000;
private static final int PACKAGENAME_MM_FLAG_MOBILEINPUTUI = 10001;
private static final int PACKAGENAME_QQ_FLAG_LOGINACTIVITY = 10002;
private static final int PACKAGENAME_QQ_FLAG_HIDEHEAD = 10003;
private static final int PACKAGENAME_MM_FLAG_LOGINHISTORYUI = 10004;
private static final int PACKAGENAME_QQLITE_FLAG_LOGINACTIVITY = 10005;
private static final int PACKAGENAME_MM_FLAG_CONFIRMALERTACTIVITY_DIALOG = 10006;
private static final int PACKAGENAME_MM_FLAG_EXTDEVICEWXLOGINUI = 10007;
private static final String PACKAGENAME_MM_CLASSNAME_LAUNCHERUI = "com.tencent.mm.ui.LauncherUI";
private static final String PACKAGENAME_MM_CLASSNAME_LOGINHISTORYUI = "com.tencent.mm.ui.account.LoginHistoryUI";
private static final String PACKAGENAME_MM_CLASSNAME_MOBILEINPUTUI = "com.tencent.mm.ui.account.mobile.MobileInputUI";
private static final String PACKAGENAME_MM_CLASSNAME_EXTDEVICEWXLOGINUI = "com.tencent.mm.plugin.webwx.ui.ExtDeviceWXLoginUI";
private static final String PACKAGENAME_QQ_CLASSNAME_LOGINACTIVITY = "com.tencent.mobileqq.activity.LoginActivity";
private static final String PACKAGENAME_QQ_CLASSNAME_REGISTERPHONENUMACTIVITY = "com.tencent.mobileqq.activity.RegisterPhoneNumActivity";
private static final String PACKAGENAME_QQ_CLASSNAME_REGISTERVERIFYCODEACTIVITY = "com.tencent.mobileqq.activity.RegisterVerifyCodeActivity";
private static final String PACKAGENAME_QQ_CLASSNAME_SPLASHACTIVITY = "com.tencent.mobileqq.activity.SplashActivity";

public static boolean special(String packageName){
if(PACKAGENAME_MM.equals(packageName)
||PACKAGENAME_QQ.equals(packageName)
)
{
return false;
}
return false;
}
public static void special(Resources resources,String packageName){
if(PACKAGENAME_MM.equals(packageName)
||PACKAGENAME_QQ.equals(packageName)
)
{
Log.d("hzr", "special:"+packageName);
resources.getDisplayMetrics().densityDpi = android.util.DisplayMetrics.DENSITY_LOW;
resources.getDisplayMetrics().density = 0.75f;
resources.getDisplayMetrics().xdpi = 159.37254f;
resources.getDisplayMetrics().ydpi = 159.37254f;
resources.getDisplayMetrics().scaledDensity = 1.2f;
}
}

private static int getSpecialFlag(String packageName, String className) {
if (PACKAGENAME_MM.equals(packageName)
&& className.contains(PACKAGENAME_MM_CLASSNAME_LAUNCHERUI)) {
return PACKAGENAME_MM_FLAG_LAUNCHERUI;
}
if (PACKAGENAME_MM.equals(packageName)
&& className.contains(PACKAGENAME_MM_CLASSNAME_MOBILEINPUTUI)) {
return PACKAGENAME_MM_FLAG_MOBILEINPUTUI;
}
if (PACKAGENAME_MM.equals(packageName) && className.contains(PACKAGENAME_MM_CLASSNAME_EXTDEVICEWXLOGINUI)) {
return PACKAGENAME_MM_FLAG_EXTDEVICEWXLOGINUI;
}
if (PACKAGENAME_QQ.equals(packageName)
&& className.contains(PACKAGENAME_QQ_CLASSNAME_LOGINACTIVITY)) {
return PACKAGENAME_QQ_FLA
4000
G_LOGINACTIVITY;
}
if (PACKAGENAME_MM.equals(packageName)
&& className.contains(PACKAGENAME_MM_CLASSNAME_LOGINHISTORYUI)) {
return PACKAGENAME_MM_FLAG_LOGINHISTORYUI;
}
if (PACKAGENAME_QQLITE.equals(packageName)
&& className.contains(PACKAGENAME_QQ_CLASSNAME_LOGINACTIVITY)) {
return PACKAGENAME_QQLITE_FLAG_LOGINACTIVITY;
}
if (PACKAGENAME_QQ.equals(packageName)
&& (className.contains(PACKAGENAME_QQ_CLASSNAME_REGISTERPHONENUMACTIVITY)
|| className.contains(PACKAGENAME_QQ_CLASSNAME_REGISTERVERIFYCODEACTIVITY)
|| className.contains(PACKAGENAME_QQ_CLASSNAME_SPLASHACTIVITY)
)) {
return PACKAGENAME_QQ_FLAG_HIDEHEAD;
}
return -1;
}

public static void isNeedSpecial(final Activity activity) {
isNeedSpecial(activity,null);
}
public static void isNeedSpecial(final Activity activity,View decorView) {
int specialFlag = getSpecialFlag(activity.getPackageName(),
activity.toString());
Log.d("hzr", "special:"+specialFlag);
if (specialFlag != -1) {
update(activity, specialFlag,decorView);
}
}

public static void update(final Activity activity, final int specialFlag,final View decorView) {
activity.getWindow().getDecorView()
.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

@Override
public void onLayoutChange(View v, int left, int top,
int right, int bottom, int oldLeft, int oldTop,
int oldRight, int oldBottom) {
hanldeModify(activity, specialFlag, decorView);
}
});
if(decorView!=null){
hanldeModify(activity, specialFlag, decorView);
}
}
private static void hanldeModify(final Activity activity,
final int specialFlag, final View decorView) {
try {
switch (specialFlag) {
case PACKAGENAME_MM_FLAG_LAUNCHERUI:
//checkTencentMM(activity);
break;
case PACKAGENAME_MM_FLAG_MOBILEINPUTUI:
//checkTencentMobileInputUI(activity);
break;
case PACKAGENAME_QQ_FLAG_LOGINACTIVITY:
checkTencentQQLogin(activity);
break;
case PACKAGENAME_QQ_FLAG_HIDEHEAD:
//checkTencentQQHideHead(activity);
break;
case PACKAGENAME_MM_FLAG_LOGINHISTORYUI:
//checkTencentQQLoginHistoryui(activity);
break;
case PACKAGENAME_QQLITE_FLAG_LOGINACTIVITY:
checkTencentQQLogin(activity);
break;
case PACKAGENAME_MM_FLAG_CONFIRMALERTACTIVITY_DIALOG:
checkGmsLacationConfirmal(activity,decorView);
break;
case PACKAGENAME_MM_FLAG_EXTDEVICEWXLOGINUI:
checkTencentMMExtDeviceWXLoginUI(activity, decorView);
checkTencentMMExtDeviceWXLoginUI2(activity, decorView);
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}

private static void checkGmsLacationConfirmal(Activity activity,View decorView) {
FrameLayout contentView = null;
if (decorView
.findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) decorView.findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
}

ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(2) != null) {
vGroup1 = (ViewGroup) vGroup.getChildAt(2);
LinearLayout.LayoutParams lp= (LayoutParams) vGroup1.getLayoutParams();
lp.height = 80;
}
ViewGroup vGroup2 = null;
if (vGroup != null && vGroup.getChildAt(1) != null) {
vGroup2 = (ViewGroup) vGroup.getChildAt(1);
ViewGroup vChildGroup1 = null;
if (vGroup2.getChildAt(1) != null) {
vChildGroup1 = (ViewGroup) vGroup2.getChildAt(1);
ViewGroup vChildGroup2 = null;
if (vChildGroup1.getChildAt(0) != null) {
vChildGroup2 = (ViewGroup) vChildGroup1.getChildAt(0);
LinearLayout.LayoutParams lp2 = (LayoutParams) vChildGroup2.getLayoutParams();
lp2.height = 125;
}
}
}
}

protected static void checkTencentQQLoginHistoryui(Activity activity) {
FrameLayout contentView = null;
if (activity.getWindow().getDecorView()
.findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView()
.findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
}

ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(0) != null) {
vGroup1 = (ViewGroup) vGroup.getChildAt(0);
}

ViewGroup vGroup2 = null;
if (vGroup1 != null && vGroup1.getChildAt(0) != null) {
vGroup2 = (ViewGroup) vGroup1.getChildAt(0);
}
if(vGroup2!=null && vGroup2.getChildAt(0)!=null){
if(vGroup2.getChildAt(0)!=null){
LinearLayout.LayoutParams lp =(LinearLayout.LayoutParams)vGroup2.getChildAt(0).getLayoutParams();
lp.height = 160;
if(vGroup2.getChildAt(1)!=null && vGroup2.getChildAt(1) instanceof RelativeLayout){
RelativeLayout l =(RelativeLayout) vGroup2.getChildAt(1);
if(l.getChildAt(0)!=null){
RelativeLayout.LayoutParams ll=(RelativeLayout.LayoutParams)l.getChildAt(0).getLayoutParams();
ll.bottomMargin = 0;
}

}
}

}

}

private static void checkTencentMMExtDeviceWXLoginUI(Activity activity,View decorView){
FrameLayout contentView = null;
if (activity.getWindow().getDecorView().findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView().findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
}
ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(0) != null) {
vGroup1 = (ViewGroup) vGroup.getChildAt(0);
}
if (vGroup1 != null && vGroup1.getChildAt(1) != null) {
ImageView img = (ImageView) vGroup1.getChildAt(1);
ViewGroup.LayoutParams lp = img.getLayoutParams();
lp.width = 40;
lp.height = 39;
img.setLayoutParams(lp);
}
ViewGroup vGroup2 = null;
if (vGroup1 != null && vGroup1.getChildAt(4) != null) {
vGroup2 = (ViewGroup) vGroup1.getChildAt(4);
ViewGroup.LayoutParams params = vGroup2.getLayoutParams();
params.height = 100;
vGroup2.setLayoutParams(params);
}
}

private static void checkTencentMMExtDeviceWXLoginUI2(Activity activity,View decorView){
FrameLayout contentView = null;
if (activity.getWindow().getDecorView().findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView().findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
}
ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(0) != null) {
ViewGroup mViewGroup = (ViewGroup) vGroup.getChildAt(0);
if (mViewGroup != null && mViewGroup.getChildAt(0) != null) {
vGroup1 = (ViewGroup) mViewGroup.getChildAt(0);
}
}
if (vGroup1 != null && (vGroup1 instanceof LinearLayout) && vGroup1.getChildCount() == 5) {
if (vGroup1.getChildAt(1) != null) {
ImageView img = (ImageView) vGroup1.getChildAt(1);
ViewGroup.LayoutParams lp = img.getLayoutParams();
lp.width = 40;
lp.height = 39;
img.setLayoutParams(lp);
}
ViewGroup vGroup2 = null;
if (vGroup1.getChildAt(4) != null) {
vGroup2 = (ViewGroup) vGroup1.getChildAt(4);
ViewGroup.LayoutParams params = vGroup2.getLayoutParams();
params.height = 100;
vGroup2.setLayoutParams(params);
}
}
}

private static void checkTencentMM(Activity activity) {
FrameLayout contentView = null;
if (activity.getWindow().getDecorView()
.findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView()
.findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
}

ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(0) != null) {
vGroup1 = (ViewGroup) vGroup.getChildAt(0);
}

ViewGroup vGroup2 = null;
if (vGroup1 != null && vGroup1.getChildAt(2) != null) {
vGroup2 = (ViewGroup) vGroup1.getChildAt(2);
}

ViewGroup vGroup3 = null;
if (vGroup2 != null && vGroup2.getChildAt(0) != null) {
vGroup3 = (ViewGroup) vGroup2.getChildAt(0);
}

if (vGroup3 != null && (vGroup3 instanceof RelativeLayout)
&& vGroup3.getChildCount() == 2) {
View v1 = vGroup3.getChildAt(0);
RelativeLayout.LayoutParams lp1 = (RelativeLayout.LayoutParams) v1
.getLayoutParams();
if (lp1.width == 120) {
return;
}
lp1.width = 120;
View v2 = vGroup3.getChildAt(1);
RelativeLayout.LayoutParams lp2 = (RelativeLayout.LayoutParams) v2
.getLayoutParams();
lp2.width = 120;
vGroup3.requestLayout();
}

}

private static void checkTencentMobileInputUI(Activity activity) {
FrameLayout contentView = null;
if (activity.getWindow().getDecorView()
.findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView()
.findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
}

ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(0) != null) {
vGroup1 = (ViewGroup) vGroup.getChildAt(0);
}

ViewGroup vGroup2 = null;
if (vGroup1 != null && vGroup1.getChildAt(0) != null) {
vGroup2 = (ViewGroup) vGroup1.getChildAt(0);
}

if (vGroup2 != null && (vGroup1 instanceof RelativeLayout)
&& (vGroup2 instanceof LinearLayout)) {
vGroup2.setPadding(8, 0, 8, 0);
vGroup2.requestLayout();

ViewGroup vGroup3 = null;
if (vGroup1.getChildAt(1) != null) {
vGroup3 = (ViewGroup) vGroup1.getChildAt(1);
}
if (vGroup3 != null && vGroup3 instanceof LinearLayout) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) vGroup3
.getLayoutParams();
lp.bottomMargin = 0;
for (int i = 0; i < vGroup3.getChildCount(); i++) {
View child = vGroup3.getChildAt(i);
if (child instanceof TextView) {
child.setPadding(0, 0, 0, 0);
((TextView) child).setSingleLine(true);
((TextView) child).setEllipsize(TruncateAt.END);
}
}
vGroup3.requestLayout();
}
}

}

private static void checkTencentQQHideHead(Activity activity) {
FrameLayout contentView = (FrameLayout) activity.getWindow()
.getDecorView();
if (contentView.getChildAt(1) != null
&& !(contentView.getChildAt(1) instanceof ViewGroup)) {
if(contentView.getChildAt(1).getVisibility()!=View.GONE){
contentView.getChildAt(1).setVisibility(View.GONE);
}
return;
}
if (activity.getWindow().getDecorView()
.findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView()
.findViewById(android.R.id.content);
}
}

private static void findViewAndHide(ViewGroup viewGroup){
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View v = viewGroup.getChildAt(i);
if(v instanceof ViewGroup){
findViewAndHide((ViewGroup)v);
}
if(v.toString().contains("ImmersiveTitleBar2")){
Log.d("hzr", "ImmersiveTitleBar2:");
if(viewGroup.getParent() instanceof LinearLayout){
LinearLayout.LayoutParams l = (LinearLayout.LayoutParams) viewGroup.getLayoutParams();
l.topMargin = -39;
}else if(viewGroup.getParent() instanceof RelativeLayout){
RelativeLayout.LayoutParams l = (RelativeLayout.LayoutParams) viewGroup.getLayoutParams();
l.topMargin = -39;
}

}
}

}

private static void checkTencentQQLogin(Activity activity) {
FrameLayout contentView = null;
if (activity.getWindow().getDecorView()
.findViewById(android.R.id.content) != null) {
contentView = (FrameLayout) activity.getWindow().getDecorView()
.findViewById(android.R.id.content);
}
ViewGroup vGroup = null;
if (contentView != null && contentView.getChildAt(0) != null) {
vGroup = (ViewGroup) contentView.getChildAt(0);
if (vGroup != null) {
if (vGroup.getChildAt(1) != null) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) vGroup
.getChildAt(1).getLayoutParams();
lp.bottomMargin = 5;
}
}
}

ViewGroup vGroup1 = null;
if (vGroup != null && vGroup.getChildAt(0) != null) {
vGroup1 = (ViewGroup) vGroup.getChildAt(0);
}

ViewGroup vGroup2 = null;
if (vGroup1 != null && vGroup1.getChildAt(0) != null) {
vGroup2 = (ViewGroup) vGroup1.getChildAt(0);
}

if (vGroup2 != null && (vGroup2 instanceof FrameLayout)) {
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) vGroup2
.getLayoutParams();
lp.topMargin = 15;
lp.width = 65;
lp.height = 65;
if (vGroup2.getChildAt(0) != null) {
vGroup2.getChildAt(0).getLayoutParams().width = 65;
vGroup2.getChildAt(0).getLayoutParams().height = 65;
if (vGroup2.getChildAt(1) != null) {
vGroup2.getChildAt(1).getLayoutParams().width = 65;
vGroup2.getChildAt(1).getLayoutParams().height = 65;
}
}
if (vGroup1.getChildAt(1) != null) {
ViewGroup vGroup3 = (ViewGroup) vGroup1.getChildAt(1);
if (vGroup3 != null && vGroup3.getChildAt(0) != null) {
RelativeLayout.LayoutParams p = (android.widget.RelativeLayout.LayoutParams) vGroup3
.getChildAt(0).getLayoutParams();
p.topMargin = 5;
}
if (vGroup3 != null && vGroup3.getChildAt(1) != null) {
RelativeLayout.LayoutParams p = (android.widget.RelativeLayout.LayoutParams) vGroup3
.getChildAt(1).getLayoutParams();
p.topMargin = 5;
p.height = 55;
}
}
}

}

}

然后在frameworks/base/core/java/android/app/Activity.java的onStart()方法里调用即可。
代码:

protected void onStart() {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStart " + this);
mCalled = true;
android.util.SpecialUtils.isNeedSpecial(this);//add
if (!mLoadersStarted) {
mLoadersStarted = true;
if (mLoaderManager != null) {
mLoaderManager.doStart();
} else if (!mCheckedForLoaderManager) {
mLoaderManager = getLoaderManager("(root)", mLoadersStarted, false);
}
mCheckedForLoaderManager = true;
}

getApplication().dispatchActivityStarted(this);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐