如何以编程方式获取colorAccent等内置资源的价值?

时间:2017-08-28 00:09:44

标签: android xamarin xamarin.android

如何获得引用颜色的实际值。在布局中我可以使用以下内容......

android:textColor="?android:attr/colorAccent"

..这适用于将TextView的文本颜色设置为主题定义的强调颜色。如何在运行时使用代码获取colorAccent的值?

另外,你如何发现所有可用值的列表,必须有一长串我可以获得的可用颜色列表,但该列表定义在哪里?

2 个答案:

答案 0 :(得分:2)

对于您拥有的示例,您可以使用以下内容获取该值:

Color

ColorAccent会在主题中为ObtainStyledAttributes属性设置Context(如果有)或默认值。

重要提一下,此方法Android.Resource.Attributeimport hashlib import os SALT_LEN = 64 def hash(password,salt): return hashlib.pbkdf2_hmac('sha512',password.encode(),salt,300000,dklen=124) def original_pass(password): salt = os.urandom(SALT_LEN) hashed = hash(password,salt) with open('hash.bin','wb') as file: file.write(salt + hashed) def check_pass(password): with open('hash.bin','rb') as file: data = file.read() salt,hashed = data[:SALT_LEN],data[SALT_LEN:] check_hash = hash(password,salt) return check_hash == hashed original_pass('Password') print(check_pass('Password')) 的一部分,因此,如果您已经在活动中,您会发现它是其中的一部分,但如果您在其他任何课程中,则需要传递上下文以防它不可用。

有关可用值的完整列表,您可以从while True: try: A() except NewConnectionError as err: # This will also print the reason the exception occurred print ('Detected error: {}'.format(err)) else: print("A() returned successfully.") finally: print ("Next loop iteration...") 类获取它。在VS中进行检查以查看此类具有的不同属性。也许Android文档有更好的方法。

希望这会有所帮助.-

答案 1 :(得分:1)

如果资源是Android定义的资源:

  var id = Android.Resource.Attribute.ColorAccent;

如果资源位于Dialog,Widget等内,而不是Android系统资源(即获取DatePickerDialog资源)

  var id = SomeDatePickerDialog.Resources.GetIdentifier("date_picker_header_date", "id", "android");

使用获得的id:

  var typedArray = Theme.ObtainStyledAttributes(new int[] { id });
  var color = typedArray.GetColor(0, int.MaxValue);
  if (color != int.MaxValue)
  {
      Log.Debug("COLOR", color.ToString());
  }

对于可用的基本值,R列表会根据API /主题进行更改:

但是要获得完整的参考资料,您必须使用您正在查看的API的Android源代码:

所以奥利奥测试版中定义的颜色:

然后在特定颜色的xml文件中查看它是如何定义的,并使用该定义来查找它的实际值(在valueXXX文件中的一个....)