在布局文件中使用当前主题backgroundcolor

时间:2017-02-25 20:11:11

标签: android android-theme

我有两个主题,一个黑暗和一个明亮的主题。我想获取当前主题背景颜色并在如下布局文件中使用它:

function getImage(){
  var imgSrc = window.URL.createObjectURL(this.files[0]);
  getImgSize(imgSrc,useImgSize);
}

function getImgSize(src,fn){
  var img=new Image();
  img.onload=function(){
    fn({width:img.width,height:img.height});
  }
  img.src=src;
}

function useImgSize(dimensions){
  alert(dimensions.width);
  alert(dimensions.height);
}

让我们说<View android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="(backgroundColor)" /> 是当前主题背景颜色。我需要放在哪里而不是(backgroundColor)

2 个答案:

答案 0 :(得分:1)

使用android:theme

<View
    android:theme="@style/yourTheme"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

并在您的values \ styles.xml

 <style name="yourTheme" parent="AppTheme">
        <item name="android:background">@color/green</item>
 </style>

修改:请尝试在第一时间发布您的完整问题,如果您进行了更改,请尝试在编辑部分下添加。那些喜欢帮助你的人会遇到麻烦。

对于已修改的问题,我们已经回答here

  

您可以从当前主题中获取背景颜色(或Drawable)   由:

TypedValue a = new TypedValue();
getTheme().resolveAttribute(android.R.attr.windowBackground, a, true);
if (a.type >= TypedValue.TYPE_FIRST_COLOR_INT && a.type <= TypedValue.TYPE_LAST_COLOR_INT) {
    // windowBackground is a color
    int color = a.data;
} else {
    // windowBackground is not a color, probably a drawable
    Drawable d = activity.getResources().getDrawable(a.resourceId);
}

并将其设置为您的视图!

答案 1 :(得分:1)

您问题的正确答案可能是?android:colorBackground。但您可能仍希望在某些情况下使用?android:windowBackground

虽然windowBackground将成为您活动的背景,但colorBackground似乎是您内容的默认背景颜色。

在你的情况下,你最终会像下面这样:

<View
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="?android:colorBackground" />

有关这些“默认”主题属性的完整列表,您可以查看基本Android themes.xml

的源代码