Как решить ошибку: этот атрибут должен быть локализован. (в "тексте" со значением "TOP_LEFT" )
Я компилирую исходный код Android, используя следующий файл Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := libarity
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := TouchPanelTest
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
но это даст ошибку:
main.xml: 19: error: Ошибка: этот атрибут должен быть локализован. (в "тексте" со значением "TOP_LEFT" ).
mail.xml выглядит следующим образом:
<RelativeLayout
android:id="@+id/top_left"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="#000"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TOP_LEFT" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/top_right"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="#000"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TOP_RIGHT" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/bottom_left"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="#000"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BOTTOM_LEFT" />
</RelativeLayout>
Ответы
Ответ 1
Вы можете использовать
LOCAL_MODULE_TAGS := tests
в Android.mk, чтобы исключить проверку локализации.
Другой способ - отключить проверку локализации в системе сборки. Прокомментируйте строку 81 в build/core/package.mk
#LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z
Ответ 2
Лучшей практикой для Android-приложений является определение всего нединамического контента в файлах ресурсов. Это позволяет, например, определять различные файлы ресурсов для разных языков. Как правило, это всего лишь рекомендация, и Android SDK не жалуется, если вы скорректируете значения в вашем макете xml. Однако для системы создания исходных текстов Android требуется, чтобы все строки были определены в ресурсе "значения". Вероятно, это предназначено для защиты системных сборщиков от случайного оставления содержимого в системном образе, который не будет отображаться на выбранном пользователем языке.
Что вам нужно сделать, это переместить эти строковые значения из макета и определить их в res/values/
. Обычное место для строковых значений находится в res/values/strings.xml
, но для фактического файла можно назвать все, что угодно, если оно находится в этом каталоге.
Например, в res/values /string.xml:
<string name="topLeftContent">TOP_LEFT</string>
И в макете main.xml
обратитесь к контенту по имени:
android:text="@string/topLeftContent"
Подробнее о том, как и почему, см. в документации Google по Локализации в Android.