相关疑难解决方法(0)

以编程方式更改从API响应获得的颜色资源的值

比方说,在我的API调用中,我有一个被调用的参数color.是否可以编辑或修改现有的R.colors.color以从API结果中分配颜色?

举个例子:

我打电话给我的API并返回green,现在我想用ie(绿色Toolbar,绿色TextView等)加载我的应用程序,这可能吗?

我的第一个想法是:

colors.xml被调用上创建一个项目,demo然后为它指定一个默认颜色,然后demo在我想要的任何地方使用这个颜色(Button,TextView等等)然后我认为可以用API的结果以编程方式更改这个值,所以我不需要创建一个SharedPreferences或类似的东西,以避免更多的代码.

正如@YS对我说的那样

不幸的是,你必须手动设置文本或视图的颜色...... :(

我想如果有其他方法可以做到这一点,因为我不知道Activities我的项目将包含多少,所以如果有其他方法可以做到这一点我很高兴听到其他猜测.

编辑

我正在尝试@Jared Rummler的答案,也许我做错了什么......我创造了一个简单的Json,我把我的资产我解析了Json,我把它放在一个GlobalConstant然后我做了一个"简单的应用程序".

首先,我有一个TextView和a Button包含"your_special_color",并返回它我把GlobalConstant int如下:

case "your_special_color":                
            return GlobalConstant.color; 
Run Code Online (Sandbox Code Playgroud)

然后我尝试的是我的第一个Activity有1 TextView和1,Button正如我之前所说,他们有颜色"your_special_color",我不想改变它,但我有一个Intent在我Button打开另一个Activity包含相同,但与GlobalConstant.color而且它没有改变.

我试过这样做(我的第二个活动):

public class Main2Activity extends AppCompatActivity {
private Res …
Run Code Online (Sandbox Code Playgroud)

android aapt android-resources

73
推荐指数
4
解决办法
5万
查看次数

来自主题ID的Android主题名称

我需要知道当前主题的名称,我已经拥有主题的资源ID.谁知道如何获得当前主题的名称

谢谢


public String getThemeName()
{
    PackageInfo packageInfo;
    try
    {
        packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);
        int themeResId = packageInfo.applicationInfo.theme;
        return getResources().getResourceEntryName(themeResId);
    }
    catch (NameNotFoundException e)
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

android themes

18
推荐指数
2
解决办法
7166
查看次数

如何以编程方式获取颜色属性的值

当我resolveAttribute()用来找出颜色值时?attr/colorControlNormal,我得到了236:

TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.colorControlNormal, typedValue, true);
int color = typedValue.data;
// 236 
Run Code Online (Sandbox Code Playgroud)

但是当我使用带有以下TextView元素的XML布局时:

<TextView
  android:id="@+id/textView"
  style="?android:attr/textAppearance"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textColor="?attr/colorControlNormal"
  android:text="@null" />
Run Code Online (Sandbox Code Playgroud)

...以及以下Java代码:

View textView = findViewById(R.id.textView);
int color = ((TextView) textView).getCurrentTextColor();
// -1979711488
Run Code Online (Sandbox Code Playgroud)

我的颜色值是 -1979711488


为何结果有所不同?我希望得到相同的颜色值,但它们不是.

第二种方法(我相信)返回正确的颜色值.为什么我的第一种方法错了?

我宁愿获得颜色值?attr/colorControlNormal而不需要使用实际元素.我怎样才能做到这一点?

java android android-layout android-theme android-resources

4
推荐指数
1
解决办法
1695
查看次数

以编程方式使用主题属性的 setTextAppearance

我在主题中定义了自定义文本外观。我的主题看起来像这样

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
.....
<item name="textAppearanceHeadline3">@style/TextAppearance.MySpark.Headline3</item>
.....
</style>
Run Code Online (Sandbox Code Playgroud)

这是风格TextAppearance.MyApp.Headline3

<style name="TextAppearance.MyApp.Headline3" parent="TextAppearance.MaterialComponents.Headline3">
        <item name="fontFamily">@font/avenir_next_demi</item>
        <item name="android:textSize">40sp</item>
        <item name="android:gravity">left|top</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">?attr/colorOnSurface</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

适用于 XML

<com.google.android.material.textview.MaterialTextView
        android:textAppearance="?attr/textAppearanceHeadline3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/add_product_description"/>
Run Code Online (Sandbox Code Playgroud)

适用于以编程方式引用样式

textView.setTextAppearance(R.style.TextAppearance_MyApp_Headline3)
Run Code Online (Sandbox Code Playgroud)

不起作用 当我想使用 attr 以编程方式应用 textAppearance 时,我还找不到类似的方法。

textView.setTextAppearance(R.attr.textAppearanceHeadline3)

我想使用 attr 来帮助我切换不同的主题。

android textview

1
推荐指数
1
解决办法
2091
查看次数