【问题标题】:Convert ARGB color string to int ARGB int format Color in android在android中将ARGB颜色字符串转换为int ARGB int格式颜色
【发布时间】:2020-05-20 21:17:51
【问题描述】:

我需要将 ARGB 颜色从 1 个活动传递到其他活动作为字符串。现在我需要将其他活动中的相同颜色字符串转换为 int 以传递给颜色方法中的参数。

这是我的实现:

活动1

Intent i = new Intent(Activity1.java,Activity2.class);

...

i.putExtra("color1", "Color.argb(200, 69, 202, 252)");
i.putExtra("color2", "Color.argb(200, 48, 63, 159)");
startActivity(i);

现在,我在其他类中使用这个字符串

活动2

Intent i = getIntent();
String color1 = i.getStringExtra("color1");
String color2 = i.getStringExtra("color2");

...

tvContent.setBackground(getGradientColor(Color.parseColor(color1), Color.parseColor(color1)));

...

public static GradientDrawable getGradientColor(int color1, int color2) {
    int[] colors = new int[2];
    colors[0] = color1;
    colors[1] = color2;

    GradientDrawable gd = new GradientDrawable(
            GradientDrawable.Orientation.TL_BR, colors);

    gd.setGradientType(GradientDrawable.LINEAR_GRADIENT);

    gd.setCornerRadius(50);
    gd.setStroke(0, Color.WHITE);

    return gd;
}

错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.activity.SubListActivity}: java.lang.IllegalArgumentException: Unknown color
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
    at android.app.ActivityThread.-wrap14(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6682)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
 Caused by: java.lang.IllegalArgumentException: Unknown color
    at android.graphics.Color.parseColor(Color.java:163)
    at com.gstechnovos.mathsploy.activity.SubListActivity.onCreate(SubListActivity.java:101)
    at android.app.Activity.performCreate(Activity.java:6942)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6682) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

提前谢谢你。

【问题讨论】:

    标签: android android-layout androiddesignsupport android-color android-designer


    【解决方案1】:

    您将无效的String 传递给Color.parseColor(String)

    支持的格式有:#RRGGBB#AARRGGBB

    我建议从一开始就对颜色整数进行操作。从 putExtras 中删除引号以仅创建 argb int:

    // Activity1
    i.putExtra("color1", Color.argb(200, 69, 202, 252));
    i.putExtra("color2", Color.argb(200, 48, 63, 159));
    startActivity(i);
    

    然后在第二个活动中检索并使用整数:

    Intent i = getIntent();
    int color1 = i.getIntExtra("color1");
    int color2 = i.getIntExtra("color2");
    
    ...
    
    tvContent.setBackground(getGradientColor(color1, color2));
    
    ...
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 2015-06-02
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多