2015-12-26 2 views
0

Я сделал массив элементов с цветами в colors.xml файла:Как получить доступ к XML-массиву с массивом XML?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="colorPrimary">#3F51B5</color> 
    <color name="colorPrimaryDark">#303F9F</color> 
    <color name="colorAccent">#FF4081</color> 
    <array name="rectangle_colors"> 
     <item> 
      <color>#77aa3535</color> 
     </item> 
     <item> 
      <color>#44cc1818</color> 
     </item> 
     <item> 
      <color>#ff1068</color> 
     </item> 
     <item> 
      <color>#6090cc</color> 
     </item> 
     <item> 
      <color>#6040aa</color> 
     </item> 
    </array> 
</resources> 

Я хочу, чтобы получить доступ к этим цвета, как в Java, так и в других файлах XML. Я нашел много информации о том, как получить доступ к ним в Java, но ничего для доступа к ним в XML за пределами документации here. Я не могу понять, как использовать шаблон они обеспечивают:

@[package:]array.array_name 

Я попытался это:

android:background="@[com.example.jason.miniproject].array.rectangle_colors[0]" 

, но он не работает.

Есть ли какой-либо способ для просмотра всех моих значений ресурсов XML в Android Studio, кроме функции автозаполнения, которая появляется, когда я начинаю печатать в нужном месте?

Кроме того, я собираюсь сделать это неправильно? У меня есть куча взглядов, и я хочу, чтобы эти взгляды начинались с разных цветов фона. Я хотел бы получить эти цвета из файла XML. Затем я хочу изменить эти цвета в Java, когда пользователь взаимодействует с приложением. Новые цвета будут вариациями исходных цветов, поэтому я хочу перебрать исходные цвета на Java. Является ли мой подход к сохранению этих цветов хорошей идеей?

ответ

0

Доступ к этому массиву в XML невозможен. Вы можете хранить их, как вы делаете в colors.xml, но вы можете динамически получать доступ к цветам, например, в методе onCreate().

В этом примере я доступ первого цвета массива и установить фон LinearLayout с этим цветом:

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      // 
      LinearLayout layout = (LinearLayout) findViewById(R.id.teste); 
      Resources resources = getResources(); 
      int color[] = resources.getIntArray(R.array.rectangle_colors); 
      layout.setBackgroundColor(resources.getColor(color[0])); 
      } 

Я прочитал документацию вас в курсе, но это не говорит, как получить доступ к желательному элемент из массив.

На самом деле это одно и то же:

@[package]:array/array_name 

С

@array/array_name 

Если пакет, который вы имеете в виду ваш собственный

+0

Как я уже сказал, я уже нашел много информации о доступе к XML-массивам на Java. Я хочу получить к ним доступ в XML. Документация, с которой я связан, указывает, что это возможно, но я не могу понять, как использовать шаблон, который они предоставили. Я начинаю думать, что шаблон предназначен только для доступа к всему массиву, а не для доступа к отдельным элементам массива. – Jason

+0

Как вы сказали, вы можете ссылаться только на целый массив, а не на просто элемент XML. Проблема заключается в том, что элемент массива не имеет имени, не имеет идентификатора, поэтому вы можете получить доступ только к одному элементу в коде. – tdmsoares

0

можно обойти

<resources> 
    <color name="colorPrimary">#3F51B5</color> 
    <color name="colorPrimaryDark">#303F9F</color> 
    <color name="colorAccent">#FF4081</color> 

    <color name="rectangle_colors1">#77aa3535</color> 
    <color name="rectangle_colors2">#44cc1818</color> 
    <color name="rectangle_colors3">#ff1068</color> 
    .... 
    <array name="rectangle_colors"> 
     <item> 
      <color>@color/rectangle_colors1</color> 
     </item> 
     <item> 
      <[email protected]/rectangle_colors2</color> 
     </item> 
     <item> 
      <color>@color/rectangle_colors3</color> 
     </item> 
     ..... 
    </array> 
</resources> 

Для более в fo refer Referencing a string in a string array resource with xml

Смежные вопросы