如何解决错误:必须本地化此属性.(在'text'处,值为'TOP_LEFT')

ssa*_*mar 12 android

我正在使用以下Android.mk文件编译android源代码:

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))
Run Code Online (Sandbox Code Playgroud)

但它会给出错误:

main.xml:19:错误:错误:必须本地化此属性.(在'text'处,值为'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>
Run Code Online (Sandbox Code Playgroud)

dul*_*vic 14

您可以使用

LOCAL_MODULE_TAGS := tests
Run Code Online (Sandbox Code Playgroud)

在Android.mk中省略了本地化检查.

另一种方法是在构建系统中禁用本地化检查.评论第81行 build/core/package.mk

#LOCAL_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) -z
Run Code Online (Sandbox Code Playgroud)


小智 9

Android应用程序的最佳实践是定义资源文件中的所有非动态内容.例如,这允许您为不同的语言定义不同的资源文件.通常情况下,这只是一个推荐,如果您在布局xml中对值进行硬编码,则Android SDK不会抱怨.但是,Android 源代码构建系统要求在"值"资源中定义所有字符串.这可能是为了保护系统构建者不会意外地将内容留在系统映像中,而不会以用户选择的语言显示.

您需要做的是将这些字符串值移出布局并res/values/改为定义它们.字符串值的通常位置是res/values/strings.xml,但实际文件可以命名为您喜欢的任何内容,只要它在该目录中即可.

例如,在res/values/string.xml中:

<string name="topLeftContent">TOP_LEFT</string>
Run Code Online (Sandbox Code Playgroud)

在您的main.xml布局中,请按名称查看内容:

    android:text="@string/topLeftContent"
Run Code Online (Sandbox Code Playgroud)

有关此方法和原因的详细信息,请参阅Google关于Android中本地化的文档.